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 |
+---------------------------------------------------------------------------------------------------------+
斜线之前的分支名称部分不被视为分支名称的一部分,我的同事指出这是documented behavior of Azure Devops:
Git回购分支或拉取请求:指涉中的最后一个路径区段。例如,在指涉/信头/master中,此值为master。在指涉/信头/特徴/工具中,此值为工具。
我不确定这种行为是否特别有用:我想 checkout 分支,并且需要分支名称 * 包括 * 斜线。另外,如果斜线之前的部分被去掉,很可能会混淆实际的路径,因为名称可能是模糊的。
我需要分支名称 * 包括 * 斜线。有没有简单的方法得到它?我总是必须与完整的引用工作,以确保安全?
5条答案
按热度按时间vfwfrxfs1#
我总是在脚本中使用
Build.SourceBranch
,只需将其赋给一个新变量,并从开头删除refs/heads/
即可。1.对于CI,我使用
Build.SourceBranch
变量,而不使用refs/heads
。我使用PowerShell:$branchSource =“$(生成.源分支)”
“”“”“”“”“”“
1.对于PR。我使用
System.PullRequest.SourceBranch
变量而不使用refs/heads
,因为Build.SourceBranch
包含远程PR的路径。替换与第一个选项相同,只是使用正确的变量。系统.请求.源分支
“”“”“”“”“”“
k2arahey2#
当您在PR上构建时,可以使用
System.PullRequest.SourceBranch
和System.PullRequest.TargetBranch
变量。提取要求的目的分支。例如:
refs/heads/master
。仅当由于Git PR受分支策略影响而运行构建时,才会初始化此变量。Use Predefined Build Variables
此外,如果您希望使用完整路径或短路径,您还可以根据需要定义自己的变量。
只需创建一个bash脚本,将较短的分支名称分配给一个变量。
然后,您可以稍后在管道中引用$(PullRequest_Target_分支)。
swvgeqrz3#
利用这个兄弟
如下使用 (编辑错误)
rjjhvcjd4#
这是疯狂的,还没有适当的解决办法。
这是我在谷歌上搜索到的一些东西的组合。这是针对分支机构和公关的
BRANCH_NAME
将包含斜线。因此refs/heads/mybranch
将为mybranch
,但refs/heads/feature/mybranch
将为feature/mybranch
。此处还添加了
DOCKER_IMAGE_TAG
,因为我们需要将/
替换为_
以用于Docker图像标签weylhg0b5#
可以在下面的azure-pipelines中使用.yml