首页 > 解决方案 > 从另一个管道触发 Azure Devops 管道

问题描述

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

我看到以下内容:

# this is being defined in app-ci pipeline
resources:
  pipelines:
  - pipeline: securitylib
    source: security-lib-ci
    trigger: 
      branches:
      - releases/*
      - master

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

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

标签: azureazure-devopsazure-pipelines

解决方案


编辑

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



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

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


如何设置管道触发器

我设法在一个简约的项目上启动并运行它。您可以在此处获取代码,并此处获取有关 Azure DevOps 的项目。我将尝试指导您完成我是如何做到的,并回答您在帖子中提出的问题。

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

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

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)

depends管道上(代码如下所示),我必须禁用CIPR触发,否则当我提交到这个 repo 时,这个管道会被CI触发器触发,然后在source管道执行结束时触发。这是由我的代码的前两行完成的。然后我希望在名为(YAML 中的属性)的项目中命名的管道(这是下面 YAML 中的属性source)将在更新分支时触发当前的()管道。sourcePipeliningprojectdependsmaster

trigger: none
pr: none
resources:
  pipelines:
    - pipeline: source
      project: Pipelining
      source: source
      trigger: 
        branches:
          include:
          - master
steps:
  - checkout: none
  - script: echo 'triggered depends'

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

在此处输入图像描述

以及source属性,同样在 YAMLdepends管道代码中。

在此处输入图像描述


更改default分支

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

在此处输入图像描述


推荐阅读