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