假设 enable_datasync_job 在 UI 中定义为 false
选项1
要覆盖在 UI 中定义的上述变量,您可以将此 bash task 添加到您的管道
- bash: |
echo $(ENABLE_DATASYNC_JOB) # outputs as false
echo "##vso[task.setvariable variable=enable_datasync_job;]true" # override
- bash: |
echo $(ENABLE_DATASYNC_JOB) # outputs as true
由于您的模板接受布尔类型的参数,因此您会得到类似下面的内容
# template.yml
parameters:
- name: enable_datasync_job
type: boolean
steps:
- bash: |
echo $(ENABLE_DATASYNC_JOB)
还有你的主要 yml 文件
# azure-pipelines.yml
steps:
- bash: |
echo "##vso[task.setvariable variable=enable_datasync_job;]true" # override
- template: template.yml
parameters:
enable_datasync_job: $(enable_datasync_job) # fail
但是上面的 azure-pipelines.yml 将失败,因为将字符串类型转换为布尔值。查看此SO post了解更多详情
/azure-pipelines.yml (Line: 11, Col: 28): The 'enable_datasync_job'
parameter value '$(enable_datasync_job)' is not a valid Boolean.
根据上面的帖子,你可以在你的template.yml中将参数的数据类型更改为字符串
parameters:
- name: enable_datasync_job
type: string
选项 1 的最终结果
# template.yml
parameters:
- name: enable_datasync_job
type: string
steps:
- bash: |
echo $(ENABLE_DATASYNC_JOB) #outputs true
# azure-pipelines.yml
steps:
- bash: |
echo "##vso[task.setvariable variable=enable_datasync_job;]true" # override
- template: template.yml
parameters:
enable_datasync_job: $(enable_datasync_job)
选项 2
如果您只想将值 true 传递给您的模板而不覆盖管道变量,您可以像这样引用您传递的值
# template.yml
parameters:
- name: enable_datasync_job
type: boolean
steps:
- bash: |
echo ${{ parameters.enable_datasync_job }} # outputs true
echo $(ENABLE_DATASYNC_JOB) # outputs false
# azure-pipelines.yml
steps:
- template: template.yml
parameters:
enable_datasync_job: true
它为您返回 False 的原因是因为您在将值传递给参数时使用了此表达式
${{ eq(variables.enable_datasync_job, 'true') }}
根据documentation,eq函数
如果参数相等则计算 True
您尝试评估 UI 变量是否等于 true 而不是设置它
您在上面使用的表达式将始终返回 False,因为 false(UI 变量值)不等于 true(在表达式中设置)