Azure DevOps YAML管道在不同存储库上触发

10

是否可能在不同存储库的分支(例如Repo A)上触发yaml管道对提交/ PR进行触发,而不是在azure-pipelines.yaml文件所在的存储库(例如Repo B)上触发?

我知道我可以针对Repo B构建管道,并使用例如检出Repo A:

resources:
  repositories:
  - repository: Repo A
    type: github
    endpoint: ***
    name: ***/RepoA

trigger:
 - master

但触发器仅适用于Repo B,即当我在Repo A的主分支上提交时,流水线不会触发。

2个回答

12
“Sprint 173”版本似乎包含多仓库触发器功能。我猜你可能缺少引用。

Here is an example that shows how to define multiple repository resources in a pipeline and how to configure triggers on all of them.

trigger:
- main

resources:
  repositories:
  - repository: tools
    type: git
    name: MyProject/tools
    ref: main
    trigger:
      branches:
        include:
        - main
        - release

The pipeline in this example will be triggered if there are any updates to:

  • main branch in the self repo containing the YAML file
  • main or release branches in tools repo

看起来不错 - 不幸的是,它似乎不受github支持。 - Dave Higgins
好的,有趣 - 我会检查它是否也适用于pr触发器,但从文档上看应该可以。我很快就会测试并在这个工作时更改接受的答案。谢谢! - Dave Higgins
我尝试按照步骤操作,但是当MyProject/tools发生变化时,管道无法被触发,如何追踪问题? - whisper
@whisper 很难在没有看到配置的情况下做出判断。也许您可以发布一个新问题,并引用您的配置(包括它),说明与此问题有何不同,这样其他人就可以判断您是否存在不同的问题。 - Matt
@Matt,你知道在经典版本中是否有任何方法可以实现这一点吗?我们的本地环境仍在使用Azure DevOps 2017。 - Fairoz
显示剩余3条评论

3
很抱歉,目前Github Repo资源还不支持Multi-repo触发器。
正如文档中所述:
“目前仓库资源触发器只适用于Azure Repos Git存储库。它们不适用于GitHub或Bitbucket存储库资源。”
如果您正在使用Azure Repos Git存储库,则需要针对存储库资源指定触发器部分以启用Multi-repo触发器。有关更多信息,请参见此处的文档。
由于您正在使用Github,因此可以使用管道完成触发器作为解决方法。您可以参考以下步骤为RepoB管道设置管道完成触发器。
第一步,为RepoA设置触发管道
您可以在Azure DevOps中为Github RepoA创建一个管道。建议使用经典UI管道,因为它不会在您的RepoA中添加azure-pipelines.yaml文件。
我建议您添加一个空代理作业(没有任何任务)到触发管道中。这样,管道运行将始终成功。 enter image description here 您需要为此触发管道启用持续集成。这样,RepoA分支的提交/PR将自动触发此管道。
在管道编辑页面上,转到触发器选项卡,勾选启用持续集成,在分支筛选器部分添加要启用CI的分支。 enter image description here 第二步,在触发的管道中设置管道资源(即RepoB的azure-pipelines.yaml文件)。
添加管道资源并在管道资源中指定触发器部分。请参见以下示例:
resources:
  repositories:
  - repository: Repo A 
    type: github
    endpoint: ***
    name: ***/RepoA

  pipelines:
  - pipeline: repoAPipeline   # Name of the pipeline resource
    source: triggeringPipeline-RepoA # Name of the triggering pipeline
    trigger: 
      branches:
      - releases/*
      - master

当对RepoA进行更改时,触发管道将被触发并成功完成。当触发管道完成后,将触发RepoB的管道。
通过为RepoA设置触发管道和在RepoB管道中设置管道资源,您可以实现与多仓库触发器相同的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接