5

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

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

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

trigger:
 - master

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

4

2 回答 2

6

“Sprint 173”版本似乎包含了多回购触发器功能。我怀疑你可能错过了裁判。

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

trigger:
- main

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

如果对以下内容有任何更新,将触发此示例中的管道:

  • mainself包含 YAML 文件的仓库中的分支
  • mainrelease工具仓库中的分支
于 2020-08-05T17:57:24.763 回答
1

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

正如文件中所说:

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

如果你使用的是 Azure Repos Git 存储库。您需要为存储库资源指定触发器部分才能启用多存储库触发器。有关更多信息,请参阅此处的文档。

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

1、设置RepoA的触发管道

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

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

在此处输入图像描述

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

在管道编辑页面中,转到触发器选项卡,检查Enable continuous integration,在分支过滤器部分添加要启用 CI 的分支

在此处输入图像描述

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

于 2020-08-06T04:16:19.930 回答