我正在研究如何动态创建依赖项并根据条件运行作业。
这是我的管道结构:
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 阶段的一部分。
答案 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