【问题标题】:Azure Devops YAML Pipeline Trigger on different repositories不同存储库上的 Azure Devops YAML 管道触发器
【发布时间】:2020-08-05 15:55:26
【问题描述】:

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

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

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

trigger:
 - master

但触发器仅适用于 Repo B,即当我在 master 上向 Repo A 提交时,管道不会触发。

【问题讨论】:

    标签: azure-devops azure-devops-yaml


    【解决方案1】:

    “Sprint 173”版本似乎包含multi-repo triggers feature。我怀疑你可能错过了参考。

    这是一个示例,说明如何定义多个存储库 管道中的资源以及如何在所有资源上配置触发器。

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

    本示例中的管道将在有任何情况下被触发 更新到:

    • 包含 YAML 文件的 self 存储库中的 main 分支
    • mainrelease 工具库中的分支

    【讨论】:

    • 这看起来不错 - 遗憾的是它似乎不受 github 支持。
    • 我所有的内部工作都完全在 Azure DevOps 中,我很难说。 full documentation 在支持列表中特别提到了 GitHub 存储库。
    • 好吧,很有趣 - 我会检查它是否也适用于 pr 触发器,但从文档看来它应该。如果可行,我将很快进行测试并更改已接受的答案。谢谢!
    • 像魅力一样工作。谢谢!
    • 我尝试按照步骤操作,但MyProject/tools更改时无法触发管道,如何追踪问题?
    【解决方案2】:

    不幸的是,Github 存储库资源还支持多存储库触发器。

    正如文档中所说:

    存储库资源触发器目前仅适用于 Azure Repos Git 存储库。它们不适用于 GitHub 或 Bitbucket 存储库资源。

    如果您使用的是 Azure Repos Git 存储库。您需要为存储库资源指定 trigger 部分以启用多存储库触发器。有关详细信息,请参阅文档 here

    由于您使用的是 github,因此您可以使用 pipeline completion triggers 作为解决方法。您可以参考以下步骤为 RepoB 管道设置管道完成触发器。

    1、为 RepoA 设置触发管道

    您可以在 azure devops 中为 github RepoA 创建管道。推荐使用经典 UI 管道,因为它不会在您的 RepoA 中添加 azure-pipelines.yaml 文件。

    我建议您在触发管道中添加一个空代理作业(没有任何任务)。这样管道运行就会一直成功。

    您需要为此触发管道启用持续集成。这样 RepoA 中分支的提交/PR 将自动触发此管道。

    在管道Edit页面,转到Triggers选项卡,勾选Enable continuous integration,在Branches Filters部分添加要启用CI的分支

    2、在触发管道中设置管道资源(即RepoB的azure-pipelines.yaml文件)

    添加pipeline resources 并在管道资源中指定触发器部分。见下例:

    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 的管道中的管道资源。您可以使用 Multi-repo 触发器实现相同的效果。

    【讨论】:

      猜你喜欢
      • 2020-04-24
      • 2020-04-13
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-18
      • 2020-08-26
      相关资源
      最近更新 更多