Azure DevOps被触发管道与触发源提交版本不匹配问题
Azure DevOps 管道链式触发代码版本不匹配问题
场景说明
- 基于同一代码仓库的
develop分支实现链式触发:Pipeline A运行完成后自动触发Pipeline B - 业务要求支持不同提交触发并发构建,
trigger:batch: true批量合并触发配置不符合需求 - 同逻辑在Jenkins环境下运行正常,可分别针对c1、c2提交触发两次独立的Pipeline B运行
管道配置详情
Pipeline A 配置
# PIPELINE-A trigger: branches: include: - develop pr: none name: $(Build.SourceBranchName)__$(Build.SourceVersion)__$(Date:yyyy-MM-dd_hh-mm) jobs: - job: Test pool: name: 'Default' steps: - task: CmdLine@2 displayName: Simulate 3 min. task inputs: script: | echo $(Build.SourceBranchName) echo $(Build.SourceVersion) sleep 180 workingDirectory: '$(Build.SourcesDirectory)'
Pipeline B 配置
# PIPELINE-B trigger: none pr: none resources: pipelines: - pipeline: PIPELINE-A source: PIPELINE-A trigger: branches: include: - develop name: $(Build.SourceBranchName)__$(Build.SourceVersion)__$(Date:yyyy-MM-dd_hh-mm) jobs: - job: Test pool: name: 'Default' steps: - task: CmdLine@2 displayName: Simulate task inputs: script: | echo $(Build.SourceBranchName) echo $(Build.SourceVersion) echo $(resources.pipeline.PIPELINE-A.sourceBranch) echo $(resources.pipeline.PIPELINE-A.sourceCommit) workingDirectory: '$(Build.SourcesDirectory)'
问题复现表现
向develop分支连续推送c1、c2两个提交后,观测到如下运行行为:
- Pipeline A触发逻辑正常,共产生2次独立运行,分别绑定c1、c2提交
- 绑定c1提交的Pipeline A运行完成后,Pipeline B被触发,但版本变量取值异常:
- 内置变量
Build.SourceVersion取值为分支最新提交c2,和触发源Pipeline A绑定的c1提交不匹配 - 仅资源变量
resources.pipeline.PIPELINE-A.sourceCommit可以正确取到触发源对应的c1提交ID
- 内置变量
- 绑定c2提交的Pipeline A运行完成后,Pipeline B再次被触发,此时
Build.SourceVersion与resources.pipeline.PIPELINE-A.sourceCommit取值均为c2,符合预期 - 即使手动触发Pipeline A运行c1提交对应的历史版本,联动触发的Pipeline B依然会使用c2提交版本
造成的业务影响
- Pipeline B的Web运行列表中,所有运行记录均显示关联c2提交,无法区分c1、c2两次Pipeline A运行分别触发的Pipeline B执行记录
- Pipeline B运行时默认检出的代码始终为c2提交版本,和触发源对应的代码版本不一致,可能导致构建产物和预期版本不符
诉求
确认该问题是否由配置遗漏导致,提供可落地的解决方案。
内容的提问来源于stack exchange,提问作者cesjg
相关产品推荐
相关产品推荐

