我希望我的 YAML 在一个 repo RepoA 中,而我的代码在 RepoB 中构建。如何将 YAML 配置为仅在代码 RepoB 上具有 CI 触发器? 注意:这些存储库位于同一个 Azure DevOps 项目中。 YAML 位于 RepoA 的默认分支(master)中。我已经看到如果管道不在默认分支中,人们会遇到 CI 触发器的问题。
这里是 azure-pipeline.yml 的内容:
trigger: none
resources:
repositories:
- repository: RepoB
type: git
name: RepoB
ref: master
trigger:
- master
pool:
vmImage: 'windows-latest'
steps:
- checkout: RepoB
我也尝试删除该行
trigger: none
看看是否可行。正如我所期望的那样,一旦我保存了 yaml,构建就会开始,但当我对 RepoB master 进行更改时不会开始。
然后我尝试了以下和更多的猜测,但没有任何东西在 RepoB 上启用 CI 触发器。也就是说,当我提交到 RepoB 中的 master 分支时,管道从未运行过。
resources:
repositories:
- repository: RepoB
type: git
name: RepoB
ref: master
trigger:
branches:
include:
- master
pool:
vmImage: 'windows-latest'
steps:
- checkout: RepoB
这是我在 Azure Pipelines UI 中查看管道触发器时看到的内容。我应该看到 RepoB 的触发器吗?
更新 1:
虽然这些不是我的原始设置,但我已将设置更新为尽可能开放(无限制)。然后我尝试了以下操作:
我认为这是一个错误,因为出于以下原因,这些设置都不应该限制这种情况:
此外,您不应该删除并重新创建管道以使设置生效。
更新 2: 我将其缩小到此组织或项目级别设置:将作业授权范围限制为引用的 Azure DevOps 存储库
此设置的文档根本没有提到 CI 触发器,但我认为无论如何它都不应该影响这种情况,因为 repo 被显式引用。
文档参考:
我认为这是一个错误,我已在此处报告: https://developercommunity2.visualstudio.com/t/yaml-pipeline-ci-trigger-for-repository-resource-i/1314241
答案 0 :(得分:0)
我使用了你的 yaml 和所有作品(唯一的区别是我有主分支而不是主分支)
trigger: none
resources:
repositories:
- repository: RepoB
type: git
name: azure-functions
ref: main
trigger:
- main
pool:
vmImage: 'windows-latest'
steps:
- checkout: RepoB
在此屏幕上,您有一个触发器,它会触发 RepoB
上的更改
答案 1 :(得分:0)
Azure DevOps 默认启用对资源访问的一些限制。请检查此项目是否启用了项目设置页面中的以下选项。
在我这边测试,如果启用这些选项,则可以重现此问题。因此,请禁用它们,并创建一个新的 yaml 管道。新的 yaml 管道应该会按预期工作。
请参阅:Access repositories, artifacts, and other resources 了解详情。