如何让Azure Pipeline的Build.SourceBranch正确识别tag触发对应步骤
解决Azure Pipeline同时推送分支与标签时发布步骤不触发的问题
问题根因:当你同时向仓库推送分支提交与关联标签时,Azure DevOps默认会优先触发分支对应的构建任务,此时Build.SourceBranch取值为分支引用,导致基于标签的触发条件失效。
以下是两个符合需求的可行解决方案:
方案1:提交内标签检测(推荐)
不依赖系统内置的Build.SourceBranch变量,直接在构建流程中检测当前提交是否关联符合规则的发布标签,完全适配同时推送分支与标签的场景,无需修改推送习惯、无需新增流水线。
首先新增标签检测步骤,设置输出变量:
steps: - bash: | # 检测当前HEAD提交是否绑定符合语义化版本规则的标签 MATCH_TAG=$(git tag --points-at HEAD | grep -E '^v?[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1) if [ -n "$MATCH_TAG" ]; then echo "##vso[task.setvariable variable=hasValidReleaseTag;isOutput=true]true" else echo "##vso[task.setvariable variable=hasValidReleaseTag;isOutput=true]false" fi name: tagCheckStep displayName: '检测发布标签'
再修改原npm发布步骤的触发条件即可:
- bash: | npm publish displayName: 'npm publish' condition: eq(dependencies.tagCheckStep.outputs['tagCheckStep.hasValidReleaseTag'], 'true')
方案2:关闭构建批次合并
如果接受同一提交触发两次构建(一次分支构建、一次标签构建),可以直接调整流水线的触发配置:
- 进入流水线编辑页面,点击「触发器」选项卡
- 找到「批量更改(Batch changes while a build is in progress)」选项,取消勾选
- 保存配置
关闭该选项后,同时推送分支与标签时,Azure DevOps会生成两个独立的构建任务,其中标签触发的构建任务Build.SourceBranch会正确取值为标签引用,你原有配置的条件就能正常生效。
内容的提问来源于stack exchange,提问作者Archimedes Trajano
相关产品推荐
相关产品推荐

