跨不同项目构建验证

Build Validation across different Projects

我陷入了以下情况。我们有一个包含不同项目的 Azure DevOps 组织。目标是将所有管道和发布存储在“操作”项目中。

这样做的好处是,让各个团队无需处理创建管道或处理机密(.netrc、容器注册表等)

然而,似乎没有办法在项目 A 中触发构建验证拉取请求,从而触发操作项目中的管道。某些分支的构建验证只能触发项目本身内部的管道

简而言之:项目 A 中的 PR 应该触发项目“Operations”中的 Pipeline

是否有解决此问题的方法或是否会在不久的将来实施此功能? This threat 看起来很有希望实施。但此后一直沉寂。

我最初问你是否在使用 YAML 管道,因为我有一个类似的设置用于相同的目的,使 YAML 管道与代码库分开。

我大量使用 YAML 模板来完成此任务。它们是将大部分逻辑排除在源代码存储库之外的关键。但是,您仍然需要在源代码本身中使用非常轻量级的管道。

以下是我建议您设置管道的方式:

  1. 在您的 “操作” 项目中创建一个 “管道” 存储库。使用此存储库存储管道的 阶段
  2. 在包含您将要部署的项目的源代码的存储库中创建一个 YAML 文件,该文件将从您的 "Operations/Pipelines" 存储库中的模板扩展.它看起来像这样:

  name: CI-Example-Root-Pipeline-$(Date:yyyyMMdd-HHmmss)
  resources:
   repositories:
    - repository: Templates
      type: git
      name: Operations/Pipelines
  trigger:
   - master
  extends:
   - template: deploy-web-app-1.yml@Templates
     parameters:
       message: "Hello World"

  1. 在您的 "Operations/Pipelines" 存储库中创建一个模板,其中包含应用程序部署的所有 阶段。这是一个例子:

parameters:
  message: ""
stages:
   - stage: output_message_stage
     displayName: "Output Message Stage"
     jobs:
        - job: output_message_job
          displayName: "Output Message Job"
          pool:
            vmImage: "ubuntu-latest"
          steps:
           - powershell: Write-Host "${{ parameters.message }}

使用此配置,您可以控制 Operations/Pipelines 存储库中的所有管道,而不是将使用的单个项目。您可以限制对它的访问,因此只有授权的团队成员才能使用 creating/modifying 管道。

可选,您可以添加一个环境检查,要求某些环境从您的模板继承,这将停止已修改为不使用您创建的管道的部署:

Microsoft 发布了一本关于使用 YAML 模板实现安全性的入门读物,其中将详细说明您也可以使用的其他一些策略: