如何在运行 Azure 管道时使用标记在提交时获取 git 分支?

Posted

技术标签:

【中文标题】如何在运行 Azure 管道时使用标记在提交时获取 git 分支?【英文标题】:How to get git branch at commit with tag at run Azure pipeline? 【发布时间】:2021-03-16 08:42:10 【问题描述】:

在 Azure Pipeline 中,可以使用预定义的构建变量(DevOps 服务)Build.SourceBranch 和 Build.SourceBranchName,但它们在带有标签的案例提交时的值是标签。

在文档中。 https://docs.microsoft.com/en-us/azure/devops/pipelines/build/variables?view=azure-devops&tabs=yaml#build-variables-devops-services已写

当您的管道由标签触发时:refs/tags/your-tag-name 构建排队的触发存储库中的分支名称。 Git repo 分支或拉取请求:参考中的最后一个路径段。例如,在 refs/heads/master 中,这个值为 master。在 refs/heads/feature/tools 中,此值为 tools。 这是我的观察:但如果使用标签提交是 Build.SourceBranch 的最后一个路径段,那么你的标签名称

【问题讨论】:

【参考方案1】:

如文档中所述。如果管道由标签触发。然后变量 Build.SourceBranch 和 Build.SourceBranchName 将是标签名称。

但是,您可以使用 git 命令(git branch -r --contains $(Build.SourceBranchName) | grep -v $(Build.SourceVersion))来检索标签指向的分支名称。

如果您想使用分支名称作为变量,您可以使用logging commands(echo "##vso[task.setvariable variable=CurrentBranch]$branch") 定义一个变量。下面的例子:

- powershell: |
     #get the branch name
     $branch = git branch -r --contains $(Build.SourceBranchName) | grep -v $(Build.SourceVersion)
     
     #define varialbe CurrentBranch to hold the value.
     echo "##vso[task.setvariable variable=CurrentBranch]$branch" 

- powershell: echo "$(CurrentBranch)"  #use the branch name in the following steps by referring to $(CurrentBranch)

【讨论】:

以上是关于如何在运行 Azure 管道时使用标记在提交时获取 git 分支?的主要内容,如果未能解决你的问题,请参考以下文章

Azure Devops Pipeline YAML 中的 Git 标记名称

如何通过 SSH 在 azure devops 管道复制文件中使用公钥

链接 Azure DevOps 管道

如何更改 Azure 数据工厂中管道活动的集成运行时

Azure 机器学习管道:如何在失败时重试?

“创建管道时出错。”在 Azure 管道自托管代理中运行 powershell 脚本时