Azure DevOps多仓库检出问题:分支名变量重复报错
解决Azure DevOps多仓库检出时分支名变量重复的问题
问题原因
你的YAML配置在两个独立的${{ if }}块中重复定义了branchName变量,Azure Pipelines不允许同一变量被多次定义,因此触发了重复变量报错。
解决方案
将branchName的定义合并为单个变量,使用编译时条件表达式在同一个变量中根据触发场景赋值,既避免重复定义,又能覆盖分支推送和PR触发两种场景的分支名提取需求:
- 分支推送触发:从
Build.SourceBranch中剥离refs/heads/前缀得到分支名 - PR触发:从
System.PullRequest.TargetBranch中剥离refs/heads/前缀得到PR目标分支名
完整修正后的YAML配置
trigger: - dev - staging - main pr: - dev - staging - main pool: name: "Azure Pipelines" vmImage: 'windows-latest' variables: # 合并分支名逻辑,避免重复定义变量 branchName: ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/'): replace(variables['Build.SourceBranch'], 'refs/heads/', '') elseif startsWith(variables['Build.SourceBranch'], 'refs/pull/'): replace(variables['System.PullRequest.TargetBranch'], 'refs/heads/', '') else: '' }} steps: # 触发构建的repoA(Self代表当前仓库) - checkout: Self # 检出repoB的对应分支,指定独立路径避免目录冲突 - checkout: git://ProjectName/repoB@$(branchName) path: s/repoB
补充说明
- 若PR触发时需要检出PR的源分支而非目标分支,只需将
System.PullRequest.TargetBranch替换为System.PullRequest.SourceBranch即可。 - 使用
${{ ... }}编译时表达式能在流水线初始化阶段确定分支名,确保checkout步骤能正确获取分支参数。 - 通过
path参数指定repoB的检出路径,可避免与repoA的文件目录产生冲突。
内容的提问来源于stack exchange,提问作者CloudAnywhere
相关产品推荐
相关产品推荐

