【问题标题】:Azure Devops YML Template Conditions and DependenciesAzure Devops YML 模板条件和依赖项
【发布时间】:2021-10-19 18:00:01
【问题描述】:

我需要几个作业模板,但我无法配置条件和依赖项以按照我的意愿运行。我有下面的基本yaml:

parameters:
- name: environment
  displayName: Environment
- name: action
  values:
    - deploy
    - undeploy
    - redeploy
  default: redeploy
  
stages:
- stage: app
  displayName: App
  jobs:
  - deployment: kickoff
    environment:
      name: ${{  parameters.environment }}
      resourceType: virtualMachine
      tags: app
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: none
          - powershell: Write-Host "Run kickoff tasks"
  - template: undeploy.yml
    parameters:
      environment: ${{  parameters.environment }}
      action: ${{  parameters.action }}
  - template: deploy.yml
    parameters:
      environment: ${{  parameters.environment }}
      action: ${{  parameters.action }}

我的要求如下:

  • Undeploy.yml:如果 Action = ‘Deploy’,则不运行。如果 Action = ‘Undeploy’,则仅运行此模板。 Action = ‘Redeploy’,运行两个模板,但必须先运行 undeploy.yml。
  • Deploy.yml:如果 Action = ‘Deploy’,则仅运行此模板。如果 Action = ‘Undeploy’,则不运行。如果 Action = ‘Redeploy’,则运行两个模板,但 deploy.yml 必须第二个运行。

我能做到的最接近的是将模板 yaml 设置如下:

undeploy.yml

parameters:
- name: environment
  default: environmentToDeployTo
- name: action
  values:
    - deploy
    - undeploy
    - redeploy
  default: redeploy

jobs:
  - deployment: undeploy
    dependsOn: kickoff
    condition: ne ('${{parameters.action}}', 'deploy')
    environment:
      name: ${{  parameters.environment }}
      resourceType: virtualMachine
      tags: app
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: none
          #undeploy steps here#

部署.yml

parameters:
- name: environment
  default: environmentToDeployTo
- name: action
  values:
    - deploy
    - undeploy
    - redeploy
  default: redeploy

jobs:
  - deployment: dploy
    dependsOn: undeploy
    condition: ne ('${{parameters.action}}', 'undeploy')
    environment:
      name: ${{  parameters.environment }}
      resourceType: virtualMachine
      tags: app
    strategy:
      runOnce:
        deploy:
          steps:
          - checkout: none
          #dploy steps here#

此结果仅影响 deploy.yml,但无法单独运行 - undeploy.yml 作业模板必须事先运行。但是,如果没有“dependsOn”,我看不出有其他方法可以确保 undeploy.yml 先运行。

有没有按照上述要求实现这一点?

提前致谢

【问题讨论】:

  • 查看更多模板会很有用。看到扩展的模板也没有什么坏处(从管道 YML 本身,点击汉堡包并下载完整的 YML - 它会将模板扩展出来,并且可以用于调试)
  • 找不到汉堡图标,但我已将 yaml 复制到原帖中

标签: azure-devops yaml


【解决方案1】:

dependsOn 将阶段或作业的名称作为输入,而不是模板文件的名称。查看更多模板会很有用,但如果您可以在 dependsOn 中使用阶段或作业的名称,您可能会得到您正在寻找的结果。

在此处将扩展模板视为您的指南 - 您可以引用在不同模板中声明的阶段或作业,只要它在管道运行时扩展到正确的位置。

【讨论】:

  • 抱歉,我最初提到了模板文件以避免任何混淆。我的现实是,我的工作名称是“dependsOn”。我已经粘贴了 yamls 的精简版本,并删除了运行安装/卸载的额外部署任务。
  • 你试过ne (parameters.action, 'undeploy')这样的条件吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 2020-04-08
  • 2021-12-07
相关资源
最近更新 更多