如何在Azure DevOps中获得带斜杠的分支名称?

zlhcx6iw  于 2022-12-14  发布在  其他
关注(0)|答案(5)|浏览(150)

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 分支,并且需要分支名称 * 包括 * 斜线。另外,如果斜线之前的部分被去掉,很可能会混淆实际的路径,因为名称可能是模糊的。
我需要分支名称 * 包括 * 斜线。有没有简单的方法得到它?我总是必须与完整的引用工作,以确保安全?

vfwfrxfs

vfwfrxfs1#

我总是在脚本中使用Build.SourceBranch,只需将其赋给一个新变量,并从开头删除refs/heads/即可。
1.对于CI,我使用Build.SourceBranch变量,而不使用refs/heads。我使用PowerShell:
$branchSource =“$(生成.源分支)”
“”“”“”“”“”“
1.对于PR。我使用System.PullRequest.SourceBranch变量而不使用refs/heads,因为Build.SourceBranch包含远程PR的路径。替换与第一个选项相同,只是使用正确的变量。
系统.请求.源分支
“”“”“”“”“”“

k2arahey

k2arahey2#

当您在PR上构建时,可以使用System.PullRequest.SourceBranchSystem.PullRequest.TargetBranch变量。

  • 系统.提取请求.目标分支 *

提取要求的目的分支。例如:refs/heads/master。仅当由于Git PR受分支策略影响而运行构建时,才会初始化此变量。
Use Predefined Build Variables
此外,如果您希望使用完整路径或短路径,您还可以根据需要定义自己的变量。
只需创建一个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_分支)。

swvgeqrz

swvgeqrz3#

利用这个兄弟

variables:
  BRANCH_NAME: $[replace(variables['Build.SourceBranch'], 'refs/heads/', '')]

如下使用 (编辑错误)

$(BRANCH_NAME)
rjjhvcjd

rjjhvcjd4#

这是疯狂的,还没有适当的解决办法。
这是我在谷歌上搜索到的一些东西的组合。这是针对分支机构和公关的

variables:

  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/heads/') }}:
    BRANCH_NAME: $[ replace(variables['Build.SourceBranch'], 'refs/heads/', '') ]
    DOCKER_IMAGE_TAG: $[ replace(replace(variables['Build.SourceBranch'], 'refs/heads/', ''), '/', '_') ]

  ${{ if startsWith(variables['Build.SourceBranch'], 'refs/pull/') }}:
    BRANCH_NAME: $[ replace(variables['System.PullRequest.SourceBranch'], 'refs/heads/', '') ]
    DOCKER_IMAGE_TAG: $[ replace(replace(variables['System.PullRequest.SourceBranch'], 'refs/heads/', ''), '/', '_') ]

BRANCH_NAME将包含斜线。因此refs/heads/mybranch将为mybranch,但refs/heads/feature/mybranch将为feature/mybranch
此处还添加了DOCKER_IMAGE_TAG,因为我们需要将/替换为_以用于Docker图像标签

weylhg0b

weylhg0b5#

可以在下面的azure-pipelines中使用.yml

branch=$(Build.SourceBranch)
export branch=$(echo "${branch}" | sed 's/refs\/heads\///g')

相关问题