azure - 从另一个管道触发 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 管道)或触发管道(在我的情况下是部署管道)。
还不清楚pipeline
andsource
指的是什么,以及我如何找出这些变量?它们都是管道的名称吗?我尝试了各种不同的排列,但似乎没有任何效果。
解决方案
编辑
在写下我的答案后,微软提出了另一种解决方案来解决这个问题,通过经典管道使用构建完成触发器。他们的解决方案可以在这里找到。
如果您没有从触发管道发布工件,则不会触发触发的管道。
此外,使用这些类型的触发器有很大的限制。有必要将defaultBranch for manual and scheduled builds
管道中的depends
更改为工作分支。否则它不会在source
管道执行结束时启动。因此,假设您正在feature
分支上工作,并且defaultBranch
设置为feature
. 你提交你的代码,一切都会按预期运行:source
管道启动,最后,depends
管道将被触发。都好!但是当你将合并到 时master
,如果你不改变defaultBranch
,depends
管道将不会在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)
在depends
管道上(代码如下所示),我必须禁用CI
和PR
触发,否则当我提交到这个 repo 时,这个管道会被CI
触发器触发,然后在source
管道执行结束时触发。这是由我的代码的前两行完成的。然后我希望在名为(YAML 中的属性)的项目中命名的管道(这是下面 YAML 中的属性source
)将在更新分支时触发当前的()管道。source
Pipelining
project
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'
是否有意义?Azure DevOps 上的项目名称与property
YAMLdepends
管道代码中的名称相匹配很重要。对我来说是Pipelining
以及source
属性,同样在 YAMLdepends
管道代码中。
更改default
分支
为了更改defaultBranch
,由于上述问题,您应该编辑管道(在本例中为depends
管道),然后在右上角的三个点上选择Triggers
。然后选择YAML
选项卡,您将进入下图所示的屏幕,您可以在其中设置工作分支。
推荐阅读
- sympy - 通过更改变量来修改涉及函数导数的表达式
- c# - 如何在仅显示详细信息窗格期间禁用 MasterDetailsView 中的后退按钮(当主窗格不可见时)
- python - 如何使用 python 一次加载配置属性而不传递部分名称
- c++ - 发现在出口处消失的泄漏
- java - 从java中的多个方法访问变量
- c# - 将用户输入存储到 C# 中的并行数组
- reactjs - Netflix 如何显示再见页面?
- javascript - 使用历史 Api 时如何执行 React 状态更新
- javascript - 将对象数组转换为二维数组
- web-scraping - urllib.error.HTTPError: HTTP 错误 404: Not Found-- 网络抓取困难