如何在Azure DevOps发布管道中通过Bash脚本获取源与目标分支名?
Azure DevOps发布管道中通过Bash获取源/目标分支名称
在Azure DevOps的发布管道中,构建管道常用的System.PullRequest.*、Build.SourceBranch等变量并不直接生效,需要根据发布的触发方式选择对应的变量和方法:
情况1:由拉取请求(PR)触发的发布
当发布由PR触发时,直接使用Release Pipelines专有的PR变量:
Release.PullRequest.SourceBranch:源分支完整路径(格式如refs/heads/feature/test)Release.PullRequest.TargetBranch:目标分支完整路径(格式如refs/heads/main)
若仅需要分支名称(去掉refs/heads/前缀),可通过Bash字符串处理提取:
# 提取源分支名 SOURCE_BRANCH_NAME=$(echo "$RELEASE_PULLREQUEST_SOURCEBRANCH" | sed 's/refs\/heads\///') # 提取目标分支名 TARGET_BRANCH_NAME=$(echo "$RELEASE_PULLREQUEST_TARGETBRANCH" | sed 's/refs\/heads\///') echo "源分支名: $SOURCE_BRANCH_NAME" echo "目标分支名: $TARGET_BRANCH_NAME"
情况2:由分支推送触发的发布(关联构建工件)
如果发布是由分支推送后触发的构建所关联的,需要通过发布管道中的工件变量获取分支信息:
RELEASE_ARTIFACTS_<ArtifactName>_SOURCEBRANCH:关联构建的源分支完整路径RELEASE_ARTIFACTS_<ArtifactName>_SOURCEBRANCHNAME:关联构建的源分支名称
注意将<ArtifactName>替换为你发布管道中实际的工件名称(需大写,空格替换为下划线),例如工件名为MyBuildArtifact,则变量为RELEASE_ARTIFACTS_MYBUILDARTIFACT_SOURCEBRANCHNAME。
示例Bash脚本:
# 替换为你的工件名称 ARTIFACT_NAME="MyBuildArtifact" SOURCE_BRANCH_NAME="${!RELEASE_ARTIFACTS_${ARTIFACT_NAME^^}_SOURCEBRANCHNAME}" echo "源分支名: $SOURCE_BRANCH_NAME"
验证可用变量
若不确定哪些变量存在,可在Bash任务中打印所有相关变量排查:
printenv | grep -E "(RELEASE_|BUILD_)"
内容的提问来源于stack exchange,提问作者Surbhi Tomar
相关产品推荐
相关产品推荐

