Как совместить многоступенчатый 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.

Другие вопросы по тегам