Как совместить многоступенчатый CICD yaml с запросом на вытягивание
Недавно я применил многоступенчатый YAML для своего проекта, который состоит как из CI, так и из CD.
Впоследствии я настраиваю политики ветвления, чтобы запускать только часть CI при создании запроса на перенос, добавляя условие на этапе CD, чтобы его пропустить.
trigger:
branches:
include:
- master
paths:
include:
...
stages:
- stage: Build
jobs:
- job: Build
pool:
vmImage: 'windows-latest'
steps:
...
- stage: Deploy
condition: and(succeeded(), ne(variables['Build.Reason'], 'PullRequest'))
displayName: 'Deploy'
jobs:
...
После выполнения запроса на вытягивание вся часть CI / CD запускается снова, поскольку в главную ветвь вставляется новый код. Есть ли способ предотвратить повторный запуск CI или загрузить артефакт из предыдущего запуска, чтобы своего рода «возобновить» CD?
Идея состоит в том, чтобы запускать только CI при создании запроса на вытягивание и продолжать для CD после завершения запроса на вытягивание.
1 ответ
Решено путем разделения CI и CD на 2 файла yaml, при этом CD потребляет артефакты из CI.
Когда PR устанавливает триггеры в политиках ветвления с фильтром пути для указания CI, а CD устанавливается как триггер по той же ветви с тем же фильтром пути. Таким образом, CD сработает после завершения PR, так как ветка была обновлена, а затем он загрузит артефакты, созданные CI во время PR.