首页 > 解决方案 > 无法确定触发构建的管道

问题描述

我正在使用 Azure DevOps 的多存储库功能,记录在这里:

​https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/multi-repo-checkout?view=azure-devops

我在一个仓库中有我的 YAML 文件,并且管道指向该 YAML。YAML 为另一个存储库资源设置了触发器,因此当该存储库更新时,将触发管道:

 resources:
   repositories:
   - repository: MyRepo
     endpoint: 'MyRepos'
     type: git
     name: RepoName
     trigger:
     - '*'

文档声称“Build.SourceBranch”变量将允许我确定 MyRepo 中的哪个分支触发了管道构建:“当对其中一个存储库的更新触发管道时,则基于触发存储库设置以下变量”

然而,情况似乎并非如此。无论哪个分支触发构建,“Build.SourceBranch”始终是“refs/heads/master”,大概是因为保存 YAML 的 repo 将“master”作为其默认分支。

我也找不到任何设置为触发构建的分支名称的环境变量。那么如何获取触发构建的分支的名称呢?如果没有可能的方法,我认为这需要添加!

标签: azureazure-devopsazure-pipelinesazure-triggersazure-devops-yaml

解决方案


问题是:

根据文档,Build.SourceBranch设置基于触发存储库。但是,它的值是由 YAML 文件在实践中所在的 repo 决定的。

我做了以下测试。有两个存储库,“RepoA”和“RepoB”。两个 repos 都有两个分支,“master”和“bran”。YAML 文件位于“RepoA”的“master”中

  1. 对“RepoB”的“麸皮”进行更改。的Build.SourceBranch值为refs/heads/master。它与文档不一致。

  2. 对“RepoA”的“麸皮”进行更改。的Build.SourceBranch值为refs/heads/bran。它与文档一致。

  3. 在“RepoB”的“master”中提交更改。的Build.SourceBranch值为refs/heads/master。它与文档一致。

  4. 在“RepoA”的“master”中提交更改。的Build.SourceBranch值为refs/heads/master。它与文档一致。

因此,如果构建是由“RepoA”触发的,Build.SourceBranch则可以成功代表真正的分支。但是,如果构建是由 'RepoB' 触发的,则值Build.SourceBranch总是refs/heads/master

我们已将此问题报告给产品组。


推荐阅读