0

我试图弄清楚如何动态创建依赖项并根据条件运行作业。

这是我的管道的结构:

主要.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 中,我有一个单独的作业来复制构建工件,如果没有 deployQA 中的复制步骤,接下来的两个作业(deployApp1 和 deployApp2)将失败。

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

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

4

2 回答 2

0

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

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

感谢以下帖子: 如果当前阶段有任何作业,如何动态引用 Azure Pipelines 中的先前作业

于 2021-06-28T19:00:37.367 回答
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:
于 2021-06-24T04:21:55.587 回答