Если вы не публикуете артефакт из запускающего конвейера, он не запустит запущенный конвейер.
Кроме того, существует очень большое ограничение на использование этих типов триггеров. Необходимо изменить defaultBranch for manual and scheduled builds
в конвейере depends
на рабочую ветвь. В противном случае он не сработает в конце выполнения конвейера source
. Итак, допустим, вы работаете над веткой feature
, а defaultBranch
имеет значение feature
. Вы фиксируете свой код, и все будет работать так, как ожидается: включится конвейер source
, и по его окончании будет запущен конвейер depends
. Все хорошо! Но когда вы сливаетесь с master
, если вы не измените defaultBranch
, конвейер depends
не будет запущен в конце конвейера source
. Я объясняю, как изменить defaultBranch
в конце ответа.
Как настроить триггер конвейера
Мне удалось настроить его и запустить на минималистичном c проект. Здесь вы можете иметь код и здесь проект на Azure DevOps. Я постараюсь go показать вам, как я это сделал, и отвечу на вопросы, которые вы задали в своем посте.
Я буду называть запущенный конвейер depends
конвейером, а запускающий конвейер - * Конвейер 1028 *.
. На конвейере source
не нужно ничего делать , кроме публикации артефакта. Если вы не опубликуете sh артефакт из конвейера source
, он не будет работать. Ниже вы можете найти код, который я использую для моего фиктивного source
конвейера. Я хочу, чтобы он был запущен для master
ветви, и в конце я хочу обязательно опубликовать sh артефакт.
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
, в противном случае, когда я фиксирую это репо, этот конвейер будет запущен * Триггер 1043 *, а затем к концу выполнения конвейера source
. Это делается двумя первыми строчками моего кода. Затем я хочу, чтобы конвейер с именем source
(это свойство source
в YAML ниже) внутри проекта с именем Pipelining
(project
свойство в 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'
Имеет ли это смысл? Важно, чтобы имя вашего проекта на Azure DevOps совпадало с property
в коде конвейера YAML depends
. Для меня это Pipelining
![enter image description here](https://i.stack.imgur.com/U9DHT.png)
Как и свойство source
, снова в коде конвейера YAML depends
.
![enter image description here](https://i.stack.imgur.com/x9czU.png)
Измените ветку default
Чтобы изменить defaultBranch
из-за упомянутой проблемы выше, вы должны отредактировать конвейер (в данном случае, конвейер depends
), затем на трех точках в правом верхнем углу выберите Triggers
. Затем выберите вкладку YAML
, и вы попадете на экран, показанный на рисунке ниже, где вы можете установить рабочую ветвь.
![enter image description here](https://i.stack.imgur.com/tWeta.png)