在作业之间动态创建作业依赖关系

时间:2021-06-23 19:05:50

标签: azure-devops azure-devops-pipelines azure-yaml-pipelines

我正在研究如何动态创建依赖项并根据条件运行作业。

这是我的管道结构:

main.yaml:

stages:
- stage: build
  jobs:
  - template: build.yaml

- stage: deployDev
  dependsOn: build
  jobs:
  - template: deployApp1.yaml
    parameters:
      environmentName: Dev
  - template: deployApp2.yaml
    parameters:
      environmentName: Dev

- stage: deployQA
  dependsOn: deployDev
  jobs:
  - template: promote.yaml
    parameters:
      environmentName: QA
  - template: deployApp1.yaml
    parameters:
      environmentName: QA
  - template: deployApp2.yaml
    parameters:
      environmentName: QA

promote.yaml

jobs:
- job: copy
  steps:
  - task:

deployApp1.yaml

jobs:
-job: deployApp1
 steps:
 - task:

deployApp2.yaml

jobs:
- job: deployApp2
  steps:
  - task:

在 deployQA 中,我有一个单独的作业来复制构建工件,接下来的两个作业(deployApp1 和 deployApp2)将在没有 deployQA 中的复制步骤的情况下失败。

我想为 job: deployApp1 创建对 job: copy 的条件依赖,这样如果我部署到 Dev 时它应该能够跳过没有这种依赖性。我已经尝试了来自不同帖子的不同解决方案,但没有任何运气。

我知道我是否可以为副本添加额外的阶段来解决我的问题,但我希望将副本作为 QA 阶段的一部分。

2 个答案:

答案 0 :(得分:0)

您希望 deployApp1 在阶段 copy 中运行时依赖于 deployQA 而在阶段 deployDev 中运行时不依赖任何东西吗?

您可以向模板添加 dependsOn 参数并使用它来控制作业的依赖项:

stages:
- stage: build
  jobs:
  - template: build.yaml

- stage: deployDev
  dependsOn: build
  jobs:
  - template: deployApp1.yaml
    parameters:
      environmentName: Dev
  - template: deployApp2.yaml
    parameters:
      environmentName: Dev

- stage: deployQA
  dependsOn: deployDev
  jobs:
  - template: promote.yaml
    parameters:
      environmentName: QA
  - template: deployApp1.yaml
    parameters:
      environmentName: QA
      dependsOn: copy
  - template: deployApp2.yaml
    parameters:
      environmentName: QA
      dependsOn: copy

# promote.yaml

jobs:
- job: copy
  steps:
  - task:

# deployApp1.yaml

parameters:
- name: environmentName
- name: dependsOn
  default: []

jobs:
- job: deployApp1
  dependsOn: ${{ parameters.dependsOn }}
  steps:
  - task:

# deployApp2.yaml
parameters:
- name: environmentName
- name: dependsOn 
  default: []

jobs:
- job: deployApp2
  dependsOn: ${{ parameters.dependsOn }}
  steps:
  - task:

答案 1 :(得分:0)

我能够从下面的帖子中找出适合我的场景的解决方案,但是为了能够获得我的特定用例的答案,我必须将 makeExplicitDependency 参数设置为 false。

${{ if eq(parameters.makeExplicitDependency, true) }}: 依赖:测试

感谢以下帖子: How to dynamically reference previous jobs in Azure Pipelines if there are any in the current stage