构建UI_Repo时如何检出API_Repo匹配分支,不存在则回退到main
实现分支匹配优先的API仓库检出逻辑
现有两个代码仓库分支结构如下:
UI_Repo - Feature1 - Feature2 - main API_Repo - Feature2 - main
在构建UI_Repo时,需要优先检出API_Repo中与当前UI分支同名的分支;若该分支不存在,则自动回退使用main分支。以下是具体实现方案:
完整构建步骤配置
steps: # 1. 先检出当前UI仓库 - checkout: self # 2. 检查API仓库是否存在匹配分支,动态设置目标分支变量 - task: PowerShell@2 inputs: targetType: 'inline' script: | # 提取当前UI分支的短名称(去掉refs/heads/前缀) $branchName = "$(Build.SourceBranch)".Split('/')[-1] # 远程检查API仓库的分支是否存在 $branchExists = git ls-remote --heads git://Proj/API_Repo "refs/heads/$branchName" if ($branchExists) { Write-Host "API仓库存在匹配分支 $branchName,将检出该分支" Write-Host "##vso[task.setvariable variable=APITargetBranch]$branchName" } else { Write-Host "API仓库不存在匹配分支 $branchName,将回退检出main分支" Write-Host "##vso[task.setvariable variable=APITargetBranch]main" } # 3. 根据变量动态检出API仓库 - checkout: git://Proj/API_Repo@$(APITargetBranch)
补充说明
- 脚本通过
git ls-remote --heads远程检查分支是否存在,无需完整克隆仓库,避免了不必要的时间浪费 - 若使用Linux/macOS构建环境,可将PowerShell步骤替换为Bash脚本:
- task: Bash@3 inputs: targetType: 'inline' script: | # 提取分支短名称 branchName=$(echo $(Build.SourceBranch) | awk -F '/' '{print $NF}') # 检查分支是否存在 if git ls-remote --heads git://Proj/API_Repo "refs/heads/$branchName" | grep -q "$branchName"; then echo "API仓库存在匹配分支 $branchName,将检出该分支" echo "##vso[task.setvariable variable=APITargetBranch]$branchName" else echo "API仓库不存在匹配分支 $branchName,将回退检出main分支" echo "##vso[task.setvariable variable=APITargetBranch]main" fi
内容的提问来源于stack exchange,提问作者Dilbert789
相关产品推荐
相关产品推荐

