Пайплайны CI/CD¶
Пайплайны, или конвейеры — это компоненты верхнего уровня в системе непрерывной интеграции, доставки и развертывания.
Пайплайны включают:
- Задания (jobs), которые определяют, что делать. Например, задания по компиляции или тестированию кода.
- Стадии (stages), которые определяют, когда выполнять задания. Например, стадии, на которых выполняются тесты, следуют за стадиями, на которых компилируется код.
Задания выполняются средствами выполнения (раннерами). При наличии достаточного количества одновременно работающих средств выполнения несколько заданий на одной и той же стадии выполняются параллельно.
Если все задания стадии выполнены успешно, пайплайн переходит к следующему этапу.
Если хотя бы одно задание на текущей стадии завершилось неудачно, то следующая стадия (как правило) не выполняется, и выполнение пайплайна прерывается.
Обычно пайплайны выполняются автоматически и не требуют вмешательства после создания. Однако бывают случаи, когда с пайплайном можно взаимодействовать вручную.
Типичный пайплайн может состоять из четырех стадий, выполняемых в следующем порядке:
- Стадия сборки build с заданием на компиляцию compile.
- Стадия тестирования test с двумя заданиями test1 и test2.
- Стадия staging с развертыванием в заданную среду с заданием под названием deploy-to-stage.
- Стадия production с развертыванием в промышленную эксплуатацию с заданием под названием deploy-to-prod.
Если у вас есть зеркало репозитория, из которого берутся данные, вам может потребоваться включить триггеры пайплайнов в разделе настроек проекта Настройки > Репозиторий > Зеркалирование репозиториев > Запуск конвейеров для обновления зеркал.
Типы пайплайнов¶
Пайплайны могут быть сконфигурированы различными способами:
- Базовые пайплайны выполняют все действия на каждой стадии одновременно, а затем переходят к следующей стадии.
- Пайплайны Directed Acyclic Graph Pipeline (DAG) основаны на взаимосвязях между заданиями и могут работать быстрее, чем базовые пайплайны.
- Пайплайны запросов на слияние выполняются только для запросов на слияние (а не для каждого коммита).
- Пайплайны с объединенными результатами — это пайплайны запросов на слияние, которые действуют так, как будто изменения из исходной ветки уже были влиты в целевую ветку.
- Поезда слияния используют пайплайны с объединенными результатами для формирования очереди слияний друг за другом.
- Пайплайны «родитель-ребенок» разбивают сложные пайплайны на один родительский, который может запускать несколько дочерних подчиненных пайплайнов, работающих в одном проекте и с одним и тем же SHA. Такая архитектура пайплайнов обычно используется для монорепозиториев.
- Мультипроектные пайплайны объединяют пайплайны для разных проектов.
Конфигурирование пайплайна¶
Пайплайны и входящие в них задания и стадии определяются в файле конфигурации CI/CD-пайплайна для каждого проекта.
- Задания (jobs) являются основным компонентом конфигурации.
- Стадии определяются с помощью ключевого слова stages.
Помимо параметров конфигурации в файле CI-пайплайна, вы также можете настраивать отдельные аспекты пайплайнов через пользовательский интерфейс, например:
- Настройки пайплайна для каждого проекта.
- Расписание работы пайплайнов.
- Пользовательские переменные CI/CD.
Просмотр пайплайнов¶
Вы можете найти текущие и прошлые запуски пайплайнов на странице Сборка > Конвейеры вашего проекта. Также можно получить доступ к пайплайнам запроса на слияние, перейдя на его вкладку Конвейеры.
Выберите пайплайн, чтобы открыть его страницу и посмотреть задания, которые запускались для этого пайплайна. Отсюда можно отменить запущенный пайплайн, повторить выполнение заданий для неудачного запуска пайплайна или удалить пайплайн.
По адресу /project/-/pipelines/[branch]/latest находится ссылка на последний пайплайн для последнего коммита данной ветки. Кроме того, /project/-/pipelines/latest перенаправляет вас на последний пайплайн для последнего коммита в ветке по умолчанию для данного проекта.
Список пайплайнов можно отфильтровать по следующим параметрам:
- Автор триггера.
- Имя ветки.
- Статус.
- Тег.
- Источник.
Вы можете изменить столбец пайплайна для отображения ID пайплайна или IID пайплайна.
Ручной запуск пайплайна¶
Пайплайны могут запускаться вручную с заданными вручную переменными.
Такой подход можно использовать, если результаты работы пайплайна (например, сборка кода) требуются вне рамок стандартной работы пайплайна.
Для запуска пайплайна вручную:
- Выберите Искать или перейти к... и найдите проект.
- Выберите Сборка > Конвейеры.
- Нажмите Новый конвейер.
- В поле Запуск по имени ветки или тега выберите ветку или тег, для которых необходимо запустить пайплайн.
- Введите все переменные CI/CD, необходимые для работы пайплайна.
- Нажмите Новый конвейер.
Теперь пайплайн будет выполнять задания в соответствии с настройками.
Предварительное заполнение переменных в ручных пайплайнах¶
Ключевые слова description и value можно использовать для определения глобальных переменных на уровне пайплайна, которые предварительно заполняются при ручном запуске пайплайна. Используйте описание для пояснения информации, например, для чего используется переменная и каковы ее допустимые значения. Переменные уровня задания не могут быть предварительно заполнены.
В запускаемых вручную пайплайнах на странице Запустить новый конвейер отображаются все переменные уровня пайплайна, описание которых задано в файле .appseccode-ci.yml. Описание отображается под переменной.
Можно изменить предварительно заполненное значение, которое переопределяет значение для данного отдельного запуска пайплайна. Все переменные, переопределенные с помощью этого процесса, раскрываются и не маскируются. Если вы не определили значение (value) переменной в конфигурационном файле, то имя переменной все равно будет указано, но поле значения будет пустым.
Например:
variables:
DEPLOY_CREDENTIALS:
description: "The deployment credentials."
DEPLOY_ENVIRONMENT:
description: "Select the deployment target. Valid options are: 'canary', 'staging', 'production', or a stable branch of your choice."
value: "canary"
В этом примере:
- Переменная DEPLOY_CREDENTIALS указана на странице Запустить пайплайн, но ее значение не задано. Предполагается, что пользователь будет определять это значение каждый раз, когда пайплайн запускается вручную.
- Переменная DEPLOY_ENVIRONMENT предварительно заполнена на странице Запустить пайплайн со значением по умолчанию canary, а в описании перечисляются другие опции.
Добавление ручных операций в пайплайн¶
Ручные задания позволяют определить необходимость ручных действий перед дальнейшим продвижением по пайплайну.
Это можно сделать прямо из графа пайплайна. Для выполнения конкретного задания достаточно выбрать кнопку запуска
.
Например, пайплайн может запускаться автоматически, но для его развертывания в промышленную эксплуатацию требуется ручное действие.
Запуск нескольких ручных действий на одной стадии¶
Несколько ручных действий на одной стадии могут быть запущены одновременно с помощью команды «Выполнить все вручную». После выбора этого действия каждое отдельное ручное действие будет запущено и обновлено до актуального состояния.
Эта функциональность доступна только:
- Для пользователей с ролью не ниже Разработчик.
- Если стадия содержит ручные действия.
Пропуск пайплайна¶
Чтобы отправить (push) коммит без запуска пайплайна, добавьте [ci skip] или [skip ci], используя любую заглавную букву, в сообщение коммита.
В качестве альтернативы, если вы используете Git 2.10 или более позднюю версию, используйте опцию ci.skip в Git push. Опция ci.skip в push не пропускает пайплайны запросов на слияние.
Удаление пайплайна¶
Пользователи с ролью Владелец для проекта могут удалить пайплайн, выбрав его в меню Сборка > Конвейеры, после чего перейти на страницу пайплайна и нажать Удалить.
Удаление пайплайна не приводит к автоматическому удалению его дочерних пайплайнов.
Примечание
При удалении пайплайна уничтожаются все кэши пайплайна, а также удаляются все напрямую связанные с ним объекты, такие как сборки, логи, артефакты и триггеры. Это действие нельзя отменить.
Безопасность пайплайна на защищенных ветках¶
Строгая модель безопасности обеспечивается при запуске пайплайнов на защищенных ветвях.
Следующие действия разрешены на защищенных ветках, если пользователю разрешается выполнять слияние (merge) или push в данной ветке:
- Ручной запуск пайплайнов (с помощью Web-интерфейса или API-пайплайнов).
- Запуск пайплайнов по расписанию.
- Запуск пайплайнов с помощью триггеров.
- Запуск ручных действий на существующих пайплайнах.
- Повторное выполнение или отмена существующих заданий (с помощью веб-интерфейса или API-пайплайнов).
Переменные, помеченные как защищенные, доступны заданиям, выполняющимся в пайплайнах для защищенных веток. Назначайте пользователям право на слияние с защищенными ветвями только в том случае, если они имеют право доступа к конфиденциальной информации, такой как учетные данные и токены для установки.
Средства выполнения, помеченные как защищенные, могут запускать задания только на защищенных ветках, что предотвращает выполнение недоверенного кода на защищенном средстве выполнения (раннере) и сохраняет ключи развертывания и другие учетные данные от непреднамеренного доступа. Чтобы убедиться в том, что задания, предназначенные для выполнения на защищенных средствах выполнения, не используют обычные средства выполнения, они должны быть тегированы соответствующим образом.
Визуализация пайплайнов¶
Пайплайны могут представлять собой сложные структуры с множеством последовательных и параллельных заданий.
Для облегчения понимания процесса работы пайплайна в Системе предусмотрены графы пайплайнов, позволяющие просматривать пайплайны и их состояние.
Графы пайплайна могут отображаться в виде большого графа или миниатюрного представления, в зависимости от того, с какой страницы осуществляется доступ к графу.
Система выделяет названия стадий в графах пайплайнов заглавными буквами.
Просмотр полного графа пайплайна¶
На странице с детальными сведениями о пайплайне отображается полный граф всех заданий в пайплайне.
Вы можете группировать задания по:
-
Этапам (стадиям) — в результате чего задания, находящиеся на одной стадии, располагаются в одном столбце.
-
Зависимостям заданий — в результате чего задания упорядочиваются на основе зависимостей от их needs.
Графы мультипроектных пайплайнов позволяют визуализировать весь пайплайн, включая все межпроектные взаимозависимости.
Если стадия содержит более 100 заданий, то в графе пайплайна отображаются только первые 100 заданий. Остальные задания продолжают выполняться в обычном режиме. Чтобы просмотреть задания:
- Выберите пайплайн, и задания будут перечислены в правой части страницы с подробной информацией о пайплайне.
- В левой боковой панели выберите Сборка > Задания.
Просмотр зависимостей заданий в графе пайплайна¶
Чтобы расположить задания в графе пайплайна на основе зависимостей от их needs, выберите пункт Зависимости заданий в разделе Группировать задания по. Эта опция доступна для пайплайнов, содержащих 3 и более заданий с зависимостями заданий от needs.
Задания в крайнем левом столбце выполняются первыми, а задания, зависящие от них, группируются в следующих столбцах.
Например, test-job1 зависит только от заданий в первом столбце, поэтому отображается во втором столбце слева. deploy-job1 зависит от заданий как в первом, так и во втором столбце и отображается в третьем столбце:
Чтобы добавить линии, показывающие отношения needs между заданиями, включите тумблер Показать зависимости. Эти линии аналогичны визуализации needs:

Чтобы увидеть полное дерево зависимостей needs для задания, наведите на него курсор мыши.
Мини-графы пайплайнов¶
Мини-графы пайплайнов занимают меньше места и позволяют с первого взгляда определить, все ли задания выполнены или что-то закончилось неудачей. Мини-граф пайплайна можно найти, перейдя в одно из следующих мест:
- Индексная страница пайплайнов.
- Страница отдельного коммита.
- Страница запроса на слияние.
- Редактор пайплайнов.
Мини-графы пайплайна позволяют увидеть все связанные задания для отдельного коммита и конечный результат каждого этапа пайплайна. Это позволяет быстро понять, что именно не удалось сделать, и исправить ошибку.
Мини-графы пайплайна отображают задания только по стадиям.
Стадии на мини-графах пайплайна можно раскрывать. Наведите курсор мыши на каждую стадию, чтобы увидеть ее название и статус, и выберите стадию, чтобы развернуть список работ.
| Мини-граф | Расширенный мини-граф |
|---|---|
![]() |
![]() |

