#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 и устанавливать требования политики.
Для получения подробной информации вы можете обратиться к нашему официальному документу здесь:
- Настройте политику филиала для внешней службы
- Создайте сервер статуса запроса на извлечение с Node.js
Если вы чувствуете, что это еще больше усложняет ситуацию, просто сохранить два конвейера также будет выбором.
Комментарии:
1. Действительно, звучит как дополнительный уровень сложности. Я рассмотрю это из интереса, чтобы углубить свое понимание темы, но на данный момент придерживайтесь двух конвейеров и, скорее всего, так и оставлю. Спасибо, что разъяснили, что по умолчанию это не так просто!
2. Это действительно помогло мне не следовать по пути, который я выбрал. Готово :-).