Укажите порядок конвейеров и зависимостей - PullRequest
0 голосов
/ 27 февраля 2020

Мне трудно получить гр asp, если честно. Прямо сейчас мой лабораторный проект выглядит следующим образом:

PR для мастера -> Запускает конвейер предварительной сборки как условие для объединения кода ->

При слиянии Канал инфраструктуры запускается, только если какие-либо изменения происходят в моей папке Инфраструктура ->

При слиянии я хочу запустить конвейер развертывания , чтобы развернуть мое веб-приложение в Azure.


Рассматриваемые каналы выполняют то, что должны, т.е.

Предварительная сборка Сборка, публикация артефакта, запуск модульных тестов, проверка ARM. шаблоны.

Infra pipe развертывает необходимую инфраструктуру для моего веб-приложения, такую ​​как ResourceGroup, план приложения, служба приложения, хранилище ключей.

Deploy Pipe загружает артефакт, созданный в предварительном развертывании, и развертывает его в слоте рабочей области и заменяет его в рабочем слоте.


Мне кажется, что я не могу заставить работать конвейер, соединяющийся через зависимости , если изменения произойдут как в инфра-, так и в коде веб-приложения в мастере, который я хочу инфра-канал до запускается первым и канал развертывания только в случае успеха.

Если я объединяю только код приложения Я хочу только канал развертывания работать независимо от того, работает ли инфра-труба или нет.

Если я объединяю только инфра-код Я хочу, чтобы работала только инфракрасная труба .

Если я объединю и приложение, и код инфраструктуры , я хочу, чтобы и инфраструктура, и развернутый канал запустили в указанном c порядке .

I чувствую, что это не должно быть так сложно сделать sh, но я потратил слишком много времени, пытаясь решить эту проблему безрезультатно, кто-нибудь сможет помочь? :)


Редактировать:

Привет, извините, @ HughLin-MSFT Попытка обойти это немного, так как мы пытаемся избежать запуска скриптов влево и вправо. :)

Я видел, что в следующем выпуске вы запланировали очередь на сборку, поэтому сейчас я думаю, что нам, возможно, придется подождать этого.

Если бы я объединил мои развертывание и инфраструктуру, могу Я использую:

trigger:
  branches:
    include:
    - master
  paths:
    include:
    - Infrastructure/*

На уровне сцены и как-то пропустить этап вместо этого? В нескольких статьях упоминается «Продолжить, если пропущен», но не могу найти никакой информации о том, как на самом деле пропустить этап.

1 Ответ

0 голосов
/ 28 февраля 2020

Для первого и второго случаев вам просто нужно установить Path filters в триггерах, конвейер запускается только при изменении файла по указанному пути. Пожалуйста, обратитесь к это .

enter image description here

В третьем случае вы можете попытаться добавить два задания агента в infra pipe добавьте задачу Trigger Azure DevOps Pipeline ко второму агентскому заданию, чтобы вызвать deploy pipe, а затем установите Only when all previous jobs have succeeded в раскрывающемся списке Run this job для job2. Кроме того, перед задачей Trigger Azure DevOps Pipeline необходимо добавить задачу powershell и использовать сценарий, чтобы определить, существует ли код приложения, запустить job2, если он есть, и отменить job2, если нет.

enter image description here

Обновление :

  1. Сначала вы можете создать новый конвейер и создать переменную: changedcode
  2. Используйте Builds - получите rest api, чтобы получить фиксацию, затем получите папку с измененным кодом с помощью Commits - Get Changes rest api.
  3. Назначьте измененное имя папки с кодом в качестве значения переменная changedcode.
  4. Установить пользовательские условия для задания агента. В задании Infra, если значение переменной changedcode равно Infra, запустите задание Infra. В задании Infra используйте задачу Builds-Queue rest api или Trigger Azure DevOps Pipeline, чтобы запустить конвейер Infra. То же самое верно для Deploy задания, единственное отличие - выражение пользовательского условия.

Вот пример структуры в yaml:

jobs:
  variables: 
    changedcode: ""
- job:
  steps:
  - powershell: |
    #Get the changed code folder with rest api

- job: Infra 
  condition: containsValue($(changedcode), "Infra"))
  - powershell: |
    #queue Infra pipeline with rest api or Trigger Azure DevOps Pipeline task

- job: Deploy
  condition: (containsValue($(changedcode), "deploy")),and ....
 - powershell: |
  #queue Deploy pipeline with rest api or Trigger Azure DevOps Pipeline task
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...