Azure Devops提供了两个变量,其中包含有关当前git分支名称的信息:$(Build.SourceBranchName)
和$(Build.SourceBranch)
。
虽然SourceBranch
包含对分支的完整引用,但SourceBranchName
应该仅包含分支的简称。
不幸的是,当分支名称包含斜杠(/
)时,此行为有点意外:
+---------------------------------------------------------------------------------------------------------+
| Situation | Git branch name | Build.SourceBranch | Build.SourceBranchName |
|---------------------------------------------------------------------------------------------------------|
| branch name contains no slash | mybranch | refs/heads/mybranch | mybranch |
| branch name contains slash | release/mybranch | refs/heads/release/mybranch | mybranch |
+---------------------------------------------------------------------------------------------------------+
斜杠之前的分支名称部分不被视为分支名称的一部分。我的同事指出,这是Azure Devops的记录行为:
Git回购分支或请求请求:引用中的最后一个路径段。例如,在refs / heads / master中,此值为master。在refs / heads / feature / tools中,此值为工具。
我不确定这种行为是否特别有用:我想检出分支,并需要分支名称包含斜杠。另外,如果将斜线之前的部分去掉,则实际路径可能会混乱,因为名称可能会含糊。
我需要包含斜杠的分支名称。有没有简单的方法可以得到它?为了安全起见,我是否总是需要使用完整的引用?
建立PR时,可以使用System.PullRequest.SourceBranch
和System.PullRequest.TargetBranch
变量。
System.PullRequest.TargetBranch
作为拉取请求目标的分支。例如:
refs/heads/master
。仅当构建由于分支策略影响的Git PR而运行时,才初始化此变量。
此外,如果要使用完整路径或短路径,也可以根据需要定义自己的变量。
只需创建一个bash脚本,即可将较短的分支名称分配给变量。
# Bash script
BRANCH_NAME=$(echo "$(System.PullRequest.TargetBranch)" | awk -F/ '{print $NF}')
echo "##vso[task.setvariable variable=PullRequest_Target_Branch;]$BRANCH_NAME"
然后,您可以稍后在管道中引用$(PullRequest_Target_Branch)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句