从另一个管道触发 Azure Devops 管道

Pez*_*lio 12 azure azure-devops azure-pipelines

我在从 Azure DevOps 中的另一个管道触发管道时遇到问题。我有一个 CI 管道,我想在 CI 通过主分支时触发一个部署管道。这在技术上似乎是可行的,但文档不清楚。

我看到以下内容:

# this is being defined in app-ci pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
      - releases/*
      - master
Run Code Online (Sandbox Code Playgroud)

但不清楚 a) 这是否进入触发管道(在我的情况下为 CI 管道)或触发管道(在我的情况下为部署管道)。

也不清楚 thepipelinesource指的是什么,以及我如何找出这些变量?它们都是管道的名称吗?我尝试了各种不同的排列,但似乎没有任何效果。

rsy*_*rsy 16

编辑

写完我的答案后,Microsoft 提出了另一种解决方案来解决这个问题,即通过经典管道使用构建完成触发器。他们的解决方案可以在这里找到。



如果您不从触发管道发布工件,则不会触发触发管道。

此外,使用这些类型的触发器有很大的限制。有必要defaultBranch for manual and scheduled buildsdepends管道中的更改为工作分支。否则它不会在source管道执行结束时启动。因此,假设您在feature分支上工作,并且defaultBranch设置为feature. 你提交你的代码,一切都会按预期运行:source管道启动,最后,depends管道将被触发。都好!但是当您将合并到 时master,如果您不更改defaultBranchdepends则不会在source管道末尾触发管道。我defaultBranch在答案的末尾解释了如何更改。


如何设置管道触发器

我设法在一个简约的项目上启动并运行它。在这里,你可以有代码和了这里Azure上的DevOps项目。我将尝试指导您了解我是如何做到的,并回答您在帖子中提出的问题。

我将触发管道称为depends管道,将触发管道称为source管道。

source管道上,除了发布工件外,无需执行任何操作。如果您不从source管道发布工件,它将无法工作。您可以在下面找到我用于我的虚拟source管道的代码。我希望它为master分支触发,最后我想确保发布一个工件。

trigger:
  branches:
    include: # branch names which will trigger a build
    - master
pr: none

steps:
  # required to cause pipeline triggering downstream
  - task: CopyFiles@2
    inputs:
      contents: $(System.DefaultWorkingDirectory)/**/*.yml
      targetFolder: $(Build.ArtifactStagingDirectory)
  - task: PublishBuildArtifacts@1
    inputs:
      pathtoPublish: $(Build.ArtifactStagingDirectory)
      artifactName: dummy-$(Build.BuildId)
Run Code Online (Sandbox Code Playgroud)

depends管道上(代码如下),我必须禁用CIPR触发,否则当我提交到这个 repo 时,这个管道会被CI触发器触发,然后在source管道执行结束时触发。这是由我的代码的前两行完成的。然后我想那个叫管道source(这是source在下面的YAML属性),命名为项目内Pipeliningproject财产在YAML)将触发电流(depends)管道时,该更新master分支。

trigger: none
pr: none
resources:
  pipelines:
    - pipeline: source
      project: Pipelining
      source: source
      trigger: 
        branches:
          include:
          - master
steps:
  - checkout: none
  - script: echo 'triggered depends'
Run Code Online (Sandbox Code Playgroud)

是否有意义?Azure DevOps 上的项目名称property与 YAMLdepends管道代码中的匹配非常重要。对我来说是Pipelining

在此处输入图片说明

以及source属性,再次在 YAMLdepends管道代码中。

在此处输入图片说明


更改default分支

为了更改defaultBranch,由于上述问题,您应该编辑管道(在本例中为depends管道),然后在右上角的三个点上选择Triggers。然后选择YAML选项卡,您将进入下图所示的屏幕,您可以在其中设置工作分支。

在此处输入图片说明