Результаты триггеров PR и BatchedCI являются смешанными

#azure-devops #azure-pipelines

#azure-devops #azure-конвейеры

Вопрос:

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

Раньше у меня было два конвейера CI, один из которых запускает изменения на главном сервере, а другой запускает PR для выпуска. Это работает нормально, но эти два конвейера почти идентичны, за исключением того, что один извлекает артефакт библиотеки из основного конвейера, а другой — из конвейера выпуска для компиляции приложения.

Чтобы сделать это более удобным в обслуживании, я хотел объединить эти конвейеры и иметь триггеры, подобные этому:

 # CI triggers
trigger:
  batch: true # To reduce the number of runs to start. Will batch all commits that happen during an active run
  branches:
    include:
    - master

# PR triggers
pr:
  branches:
    include:
    - master
    - release
  

Триггеры и механизмы для извлечения правильного артефакта работают нормально.

Когда компиляция с использованием артефакта выпуска завершается неудачно, PR в git правильно показывает это. Однако, когда запуск конвейера, запускаемый batchedCI на главном сервере, завершается успешно, PR показывает, что запуск выполнен успешно (что неверно при использовании артефактов выпуска).

Как я могу использовать этот единственный конвейер, и чтобы git PR просматривал только запуски конвейера, запускаемые этим PR, игнорируя запускаемые BatchedCI на master?

Комментарии:

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

2. Нет, я хотел бы использовать один и тот же конвейер как для триггеров PR, так и для CI. Проблема в том, что если триггер PR завершается неудачно, а последующий триггер CI выполняется успешно, PR считается успешным, поскольку последний запуск выполнен успешно. Сам конвейер ведет себя по-разному в зависимости от того, является ли это триггером PR или CI, например. он извлекает требуемые артефакты библиотеки из разных конвейеров. В зависимости от этого конвейер может быть успешным или неудачным.

3. Используете ли вы репозитории Azure или Github?

4. @KrzysztofMadej Я использую Github (Enterprise).

Ответ №1:

Извините, это невозможно сделать по умолчанию.

Вы проанализировали и четко указали основную причину:

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

В качестве обходного пути вы можете попробовать добавить дополнительную проверку состояния для вашего PR.

Политики ветвления — это мощная функция, обеспечивающая высокое качество кода в вашем репозитории, устанавливая требования для всех запросов на извлечение. Внешние службы могут использовать API статуса PR для публикации подробного статуса в ваших PR. Политика филиала для внешних служб предоставляет этим сторонним службам возможность участвовать в рабочем процессе PR и устанавливать требования политики.

Для получения подробной информации вы можете обратиться к нашему официальному документу здесь:

Если вы чувствуете, что это еще больше усложняет ситуацию, просто сохранить два конвейера также будет выбором.

Комментарии:

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

2. Это действительно помогло мне не следовать по пути, который я выбрал. Готово :-).