Skip to content

Стадии

Массив stages генератор собирает автоматически: берёт все стадии из задач в порядке появления, без дублей. Явно объявлять стадии не нужно.

bsl
Сборка = Фабрика.Новая();
Сборка.Стадия = "build";

Тесты = Фабрика.Новая();
Тесты.Стадия = "test";
// stages будет [build, test]

Зарезервированные стадии .pre и .post

GitLab имеет две особые стадии, которые выполняются до всех пользовательских (.pre) и после всех (.post). Их не объявляют в stages — GitLab знает их сам.

Pipeliner это учитывает: стадии .pre/.post не попадают в сгенерированный stages, но джобы с ними выводятся как обычные.

Сахар

Вместо строковых литералов используйте методы задачи:

bsl
Линт = Фабрика.Новая();
Линт.Наименование = "lint";
Линт.ДоВсех();                 // stage: .pre
Линт.Скрипты.Добавить("lint.sh");

Уведомление = Фабрика.Новая();
Уведомление.Наименование = "notify";
Уведомление.ПослеВсех();       // stage: .post
Уведомление.Скрипты.Добавить("notify.sh");

Прямое присваивание тоже работает и фильтруется так же:

bsl
Задача.Стадия = ".pre";

Реестр зарезервированных стадий

Источник имён — Гитлаб.ЗарезервированныеСтадии(), соответствие ключ → значение:

bsl
Реестр = Гитлаб.ЗарезервированныеСтадии();
// ДоВсех -> ".pre"
// ПослеВсех -> ".post"

Если GitLab добавит новую зарезервированную стадию — она дописывается в реестр, фильтр генератора подхватит её автоматически.

Ограничение GitLab

Пайплайн, состоящий только из .pre/.post джоб, не запускается — нужна минимум одна джоба в обычной стадии.

Связка с needs

Джобы в .pre и джобы с needs: [] стартуют немедленно при создании пайплайна — используйте это для быстрых проверок (линт, smoke-тесты), которые не должны ждать сборки.