Стадии
Массив stages генератор собирает автоматически: берёт все стадии из задач в порядке появления, без дублей. Явно объявлять стадии не нужно.
Сборка = Фабрика.Новая();
Сборка.Стадия = "build";
Тесты = Фабрика.Новая();
Тесты.Стадия = "test";
// stages будет [build, test]Зарезервированные стадии .pre и .post
GitLab имеет две особые стадии, которые выполняются до всех пользовательских (.pre) и после всех (.post). Их не объявляют в stages — GitLab знает их сам.
Pipeliner это учитывает: стадии .pre/.post не попадают в сгенерированный stages, но джобы с ними выводятся как обычные.
Сахар
Вместо строковых литералов используйте методы задачи:
Линт = Фабрика.Новая();
Линт.Наименование = "lint";
Линт.ДоВсех(); // stage: .pre
Линт.Скрипты.Добавить("lint.sh");
Уведомление = Фабрика.Новая();
Уведомление.Наименование = "notify";
Уведомление.ПослеВсех(); // stage: .post
Уведомление.Скрипты.Добавить("notify.sh");Прямое присваивание тоже работает и фильтруется так же:
Задача.Стадия = ".pre";Реестр зарезервированных стадий
Источник имён — Гитлаб.ЗарезервированныеСтадии(), соответствие ключ → значение:
Реестр = Гитлаб.ЗарезервированныеСтадии();
// ДоВсех -> ".pre"
// ПослеВсех -> ".post"Если GitLab добавит новую зарезервированную стадию — она дописывается в реестр, фильтр генератора подхватит её автоматически.
Ограничение GitLab
Пайплайн, состоящий только из .pre/.post джоб, не запускается — нужна минимум одна джоба в обычной стадии.
Связка с needs
Джобы в .pre и джобы с needs: [] стартуют немедленно при создании пайплайна — используйте это для быстрых проверок (линт, smoke-тесты), которые не должны ждать сборки.
