Запуск Azure конвейера Devops из другого конвейера - PullRequest
1 голос
/ 11 марта 2020

У меня проблемы с запуском конвейера из другого конвейера в Azure DevOps. У меня есть конвейер CI, и я хочу запускать конвейер развертывания всякий раз, когда CI передает основную ветвь. Кажется, это технически возможно, но документация неясна.

Я вижу следующее:

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

Но неясно, как а) идет ли это в запускающем конвейере (в моем случае в конвейере CI) или в запущенном конвейере (в моем случае, в конвейере развертывания).

Также неясно, к чему относятся pipeline и source, и как я могу найти эти переменные? Они оба название конвейера? Я пробовал разные варианты, но ничего не получается.

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Если вы не публикуете артефакт из запускающего конвейера, он не запустит запущенный конвейер.

Кроме того, существует очень большое ограничение на использование этих типов триггеров. Необходимо изменить 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

Как и свойство source, снова в коде конвейера YAML depends.

enter image description here


Измените ветку default

Чтобы изменить defaultBranch из-за упомянутой проблемы выше, вы должны отредактировать конвейер (в данном случае, конвейер depends), затем на трех точках в правом верхнем углу выберите Triggers. Затем выберите вкладку YAML, и вы попадете на экран, показанный на рисунке ниже, где вы можете установить рабочую ветвь.

enter image description here

0 голосов
/ 12 марта 2020

Над триггером конвейера yaml должен быть определен в запущенном конвейере (развертывание конвейера).

- pipeline: string строка здесь - это идентификатор, который вы даете этому ресурсу конвейера. Это может быть любая строка.

source: string строка здесь - это имя определения запускающего конвейера (имя вашего конвейера CI).

Ниже yaml из документа конвейер ресурс .

resources:
  pipelines:
  - pipeline: string  # identifier for the pipeline resource
    project:  string # project for the build pipeline; optional input for current project
    source: string  # source pipeline definition name
    branch: string  # branch to pick the artifact, optional; defaults to all branches
    version: string # pipeline run number to pick artifact, optional; defaults to last successfully completed run
    trigger:     # optional; triggers are not enabled by default.
      branches:
        include: [string] # branches to consider the trigger events, optional; defaults to all branches.
        exclude: [string] # branches to discard the trigger events, optional; defaults to none.

Опция : Вы также можете установить триггеры конвейера со страницы пользовательского интерфейса. Go Страница редактирования запущенного конвейера yaml (Развернуть конвейер). Нажмите 3 точки и выберите Триггеры

enter image description here

Go для триггеров -> завершение сборки и нажмите кнопку добавления -> выберите конвейер запуска (CI pipe)

enter image description here

Обновление:

Я видел, что ресурс конвейера в azure -deploy.yml определен, как показано ниже.

resources:
  pipelines:
  - pipeline: 'Deploy to Development'
    source: 'DFE-Digital.dfe-teachers-payment-service'
  trigger:
    branches:
      include:
      - "master"
      - "release-stuff"

Пожалуйста, попробуйте изменить отступ элемента trigger такой же, как элемент source . Проверьте ниже пример:

    resources:
      pipelines:
      - pipeline: 'Deploy to Development'
        source: 'DFE-Digital.dfe-teachers-payment-service'
        trigger:
          branches:
            include:
            - "master"
            - "release-stuff"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...