Azure Pipelines 定义了在不同管道任务、步骤等中使用的变量和条件。定义以下 YAML 管道时,步骤ReleaseOnlyScript
仅应在变量评估组合条件时执行isValidReleaseBuild
is true
。在 Azure Pipeline DevOps 站点中,变量BuildType
被定义并设置为release
.
variables:
- name: isValidReleaseBuild
value: $[and(eq(variables['BuildType'], 'release'), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))]
steps:
- script: |
echo "BuildType: $(BuildType)"
echo "SourceBranch: $(Build.SourceBranch)"
echo "ReleaseBuild: $(isValidReleaseBuild)"
displayName: 'Buildinfo'
- ${{ if eq(variables['isValidReleaseBuild'], true) }}:
- script: |
echo "YEAH its a Release!"
displayName: 'ReleaseOnlyScript'
运行管道时,只有脚本BuildInfo
执行时输出如下。
BuildType: release
SourceBranch: refs/tags/v1.0.0
ReleaseBuild: True
为什么是ReleaseOnlyScript
没有被执行?
Update:
Thx to Alex AIT https://stackoverflow.com/a/60728480/13078117的回答,我按如下方式修改了管道,它现在按预期工作。
variables:
- name: isValidReleaseBuild
value: $[and(eq(variables['BuildType'], 'release'), startsWith(variables['Build.SourceBranch'], 'refs/tags/v'))]
jobs:
- job: check_cicd
steps:
- script: |
echo "BuildType: $(BuildType)"
echo "SourceBranch: $(Build.SourceBranch)"
echo "ReleaseBuild: $(isValidReleaseBuild)"
if [ "$(isValidReleaseBuild)" = "True" ]; then
echo "##vso[task.setvariable variable=ValidBuild;isOutput=true]True"
else
echo "##vso[task.setvariable variable=ValidBuild;isOutput=true]False"
fi
name: buildinfo
- job: release_cicd
dependsOn: check_cicd
condition: eq(dependencies.check_cicd.outputs['buildinfo.ValidBuild'], 'True')
steps:
- template: build-release.yml