Azure DevOps YAML - 根据当前模板参数将参数传递给子模板

时间:2021-04-03 06:11:15

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

我的 DevOps 管道有多层模板。我正在尝试执行以下操作:

### template A ###
parameters:
- name: check
  type: boolean
  default: false

jobs:
- template: template B                         ### template B has param 'count'
- ${{ if ne(parameters.check, true) }}:   
  count: 1
- ${{ if eq(parameters.check, true) }}:
  count: 5


### template B ###
parameters:
- name: count
  type: number
  default: 0

jobs:
- some jobs

现在,当我尝试根据条件传递参数时,它失败并显示“预期映射”错误。有没有不同的方法来做到这一点?谢谢!

1 个答案:

答案 0 :(得分:0)

导致您出错的原因是您无法直接在 jobs 中为变量赋值。另外,两个模板执行两个不同的工作,因此一个模板的变量或参数不能简单地相互调用,而是需要传递。

我的建议是使用 depends 来满足您的需求。这是一个例子。

templateA.yml:

parameters:
- name: check
  type: boolean
  default: false

jobs:
- job:jobA
  variables:
    checkVar: ${{ parameters.check }}
  steps:
  - pwsh: |
      if ($($env:CHECKVAR)) {
        echo "##vso[task.setvariable variable=Num;isOutput=true]1"
      }
      else {
        echo "##vso[task.setvariable variable=Num;isOutput=true]5"
      }
    name: outputVar
- template: templateB.yml
  parameters:
    count: $[dependencies.deployA.outputs['outputVar.Num']]

b.yml:

parameters:
- name: count
  default: 0

jobs:
- job
  dependsOn: jobA
  steps:
  ....

此外,这是我的测试 pipeline.yml,它运行良好。

trigger: none

pool:
  vmImage: ubuntu-latest

stages:
  - stage: A
    jobs:
    - template: templateA.yml
      parameters:
        check: true