CI/CD Конвейер
Конвейер (pipeline) - это верхнеуровневый компонент процесса непрерывной интеграции и доставки (CI/CD).
Конвейер состоит из следующих элементов:
- Задачи (jobs), которые определяют что конкретно нужно сделать,
- Этапы (stages), которые определяют когда конкретно нужно выполнить задачу. Например, этап
build
обычно следует за этапомtest
Задачи этапов выполняются агентами. Различные задачи этапа выполняются параллельно. Каждая задача этапа выполняется отдельно от остальных задач этапа. Количество параллельно выполняемых задач ограничено доступным количеством агентов.
Конфигурация конвейера
Конвейер и его компоненты (задачи и этапы), описываются в специальном конфигурационном файле gitflic-ci.yaml
для каждого проекта отдельно.
- Задача - это базовый конфигурационный компонент, он описывается с помощью названия задачи. Например
job-for-test
- Этапы описываются с помощью ключевого слова
stages
Пример конфигурационного файла
image: ubuntu:latest
variables:
TEST_1_SUCCESS: "true"
TEST_2_SUCCESS: "true"
before_script:
- echo "Скрипт до основных инструкций (в каждой задаче)"
stages:
- test
- build
- deploy
build:
stage: build
script:
- echo "Сборка проекта"
- echo "Собранный проект" > build.txt
artifacts:
paths: build.txt
test1:
stage: test
script:
- echo "Первый набор тестов"
- echo $TEST_1_SUCCESS
test2:
stage: test
script:
- echo "Второй набор тестов"
- echo $TEST_2_SUCCESS
deploy:
stage: deploy
script:
- echo $(cat build.txt)
- echo "Развертывание проекта"
needs:
- build
rules:
- if: $TEST_1_SUCCESS == "true" && $TEST_2_SUCCESS == "true"
after_script:
- echo "Скрипт после основных инструкций (в каждой задаче)"
Список опций конфигурации можно посмотреть на странице справочника CI/CD конфигурации.
Доступно использование файла конфгурации из удаленного источника. Подробно о настройке удаленной конфигурации можно посмотреть в настройках CI/CD проекта
Запуск конвейера
Для запуска конвейера нажмите кнопку "Создать конвейер" на странице просмотра всех конвейеров. В открывшемся окне необходимо указать ветку или тег, на котором конвейер будет создан. В этом же окне будут отображаться предзаполненные переменные, ключи и значение которых можно указать заранее и переопределить перед запуском конвейера. В этом же окне можно создать переменные, которые будут существовать только для данного конвейера. После подтверждения создания, на странице со всеми конвейерами появится запись о новом конвейере. Задачи созданного конвейера будут взяты в работу агентом при его доступности.
Содержимое конвейера
Вы можете найти текущие и предыдущие запуски конвейера на странице вашего проекта CI/CD > Конвейеры.
Нажмите на номер конвейера, чтобы открыть страницу сведений о конвейере. Страница имеет адрес вида project-name/ci-cd/pipeline/*/
, где *
- номер созданного конвейера. На странице сведений отображена информация о выполнении задач, кнопки управления конвейером (перезапуск и удаление), логи выполнения задач и артефакты проекта.
Для удаления конвейера нажмите кнопку Удалить в правой верхней части экрана.
На вкладке Задачи отображена информация о статусах и времени выполнения всех задач со всех конвейеров. Для каждой задачи указан ее текущий статус, название стадии и задачи, время выполнения задачи, если она была запущена. В меню с многоточием можно перезапустить отдельно взятую задачу.
На вкладке Артефакты расположены все артефакты, которые собираются в рамках конвейера. Для перехода к этому экрану, перейдите к просмотру конвейера и откройте вкладку Артефакты. Чтобы инициировать загрузку артефакта проекта, нажмите кнопку загрузки напротив необходимого файла. По истечении указанного времени файлы будет удалены. Для ручного удаления артефакта нажмите на кнопку удаления.
Конвейер слияния
Конвейер слияния (Merge Request Pipeline) - особый тип конвейера, который может создаваться в каждом запросе на слияние. Он обеспечивает проверку нового кода перед его слиянием в другую ветку.
Для того, чтобы этот тип конвейера был доступен необходимо перейти в настройки проекта -> Настройки CI/CD и включить флажок "Запуск конвейера слияния". После включения настройки, на главной странице запросов на слияние, созданных до включения данной опции, появится кнопка Создать конвейер слияния. В запросах, создаваемых в будущем, данный тип конвейеров будет создаваться автоматически.
Особенности конвейера слияния:
- Конвейер слияния создается на исходной ветке запроса, игнорируя содержимое целевой. Для работы с конвейером, который будет содержать в себе результат объединения исходной и целевой ветки запроса, необходимо воспользоваться конвейером результата слияния.
- В данном типе конвейеров поддерживаются предопределенные переменные семейства
CI_MERGE_REQUEST
Конвейер результата слияния
Данный функционал доступен в Enterprise версии сервиса
Конвейер результата слияния (Merge Result Pipeline) — это специальный тип конвейера, который запускается автоматически при создании запроса на слияние рабочей ветки (например, ветки hotfix
) в основную ветку (например, main
или master
). Он обеспечивает дополнительную проверку того, что объединенный код корректен, не вызывает конфликтов и готов к развёртыванию.
Основная цель конвейера результата слияния — убедиться, что результат слияния не нарушает работоспособность кода в основной ветке. Это помогает избежать ситуаций, когда изменения, прошедшие все проверки в своей ветке, после слияния вызывают проблемы из-за взаимодействия с другим кодом.
Конвейер результата слияния создается на специальном коммите, в котором происходит предварительное слияние запроса. В данном типе конвейеров поддерживаются предопределенные переменные семейства CI_MERGE_REQUEST
Чтобы включить данный тип конвейера, перейдите в настройки проекта -> Настройки CI/CD и включите флажок "Конвейер результата слияния".
Обратите внимание
Конвейер результата слияния не может быть создан в запросе, в котором присутствуют конфликты. После решения конфликтов на главной странице запроса на слияние появится кнопка для создания данного конвейера.
Подробнее о настройках Запросов на Слияние можно ознакомиться по ссылке.
Важно отметить, что после изменений в целевой ветке запроса на слияния новый конвейер результата слияния не будет создан автоматически. Это может привести к тому, что конвейер не будет отображать полностью актуальное состояние целевой ветки после выполнения слияния. Данную проблему можно решить при помощи поездов слияния. Более подробно ознакомиться с данным функционалом можно по ссылке.
Различие типов конвейеров
-
Триггер запуска:
- Стандартный конвейер запускается при изменениях в отдельной ветке.
- Конвейер результата слияния автоматически запускается при создании запроса на слияние. Если запрос уже создан, то конвейер будет создаваться при каждом изменении в исходной ветке или после нажатия кнопки "Создать конвейер результата слияния" (данная кнопка появляется если запрос на слияние был создан до того, как включена настройка, или конвейер результата слияния был удалён).
- Конвейер слияния автоматически запускается при создании запроса на слияние. Если запрос уже создан, то конвейер будет создаваться при каждом изменении в исходной ветке или после нажатия кнопки "Создать конвейер слияния" (данная кнопка появляется если запрос на слияние был создан до того, как включена настройка, или конвейер слияния был удалён).
-
Контекст выполнения:
- Стандартный конвейер проверяет работоспособность изменений в рамках одной ветки.
- Конвейер результата слияния проверяет результат слияния, что позволяет выявить проблемы, которые могут возникнуть только после интеграции кода с основной веткой.
- Конвейер слияния проверяет работоспособность кода в исходной ветке перед ее слиянием.
-
Назначение:
- Стандартный конвейер нацелен на проверку индивидуальных изменений.
- Конвейер результата слияния нацелен на проверку интеграции общих изменений в код проекта.
- Конвейер слияния нацелен на проверку кода в исходной ветки перед слиянием запроса.