Перейти к содержанию

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 и включите флажок "Конвейер результата слияния".

Конвейер результата слияния

Обратите внимание

Конвейер результата слияния не может быть создан в запросе, в котором присутствуют конфликты. После решения конфликтов на главной странице запроса на слияние появится кнопка для создания данного конвейера.

Подробнее о настройках Запросов на Слияние можно ознакомиться по ссылке.

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

Различие типов конвейеров

  1. Триггер запуска:

    • Стандартный конвейер запускается при изменениях в отдельной ветке.
    • Конвейер результата слияния автоматически запускается при создании запроса на слияние. Если запрос уже создан, то конвейер будет создаваться при каждом изменении в исходной ветке или после нажатия кнопки "Создать конвейер результата слияния" (данная кнопка появляется если запрос на слияние был создан до того, как включена настройка, или конвейер результата слияния был удалён).
    • Конвейер слияния автоматически запускается при создании запроса на слияние. Если запрос уже создан, то конвейер будет создаваться при каждом изменении в исходной ветке или после нажатия кнопки "Создать конвейер слияния" (данная кнопка появляется если запрос на слияние был создан до того, как включена настройка, или конвейер слияния был удалён).
  2. Контекст выполнения:

    • Стандартный конвейер проверяет работоспособность изменений в рамках одной ветки.
    • Конвейер результата слияния проверяет результат слияния, что позволяет выявить проблемы, которые могут возникнуть только после интеграции кода с основной веткой.
    • Конвейер слияния проверяет работоспособность кода в исходной ветке перед ее слиянием.
  3. Назначение:

    • Стандартный конвейер нацелен на проверку индивидуальных изменений.
    • Конвейер результата слияния нацелен на проверку интеграции общих изменений в код проекта.
    • Конвейер слияния нацелен на проверку кода в исходной ветки перед слиянием запроса.