Skip to content

Описание задачи

ОписаниеЗадачи — центральная модель библиотеки. Создаётся только через фабрику:

bsl
Задача = Фабрика.Новая();

Под-объекты (образ, кэш, артефакты, сервисы и т.д.) создаются лениво при первом обращении — отдельной инициализации не требуется.

Базовые поля

ПолеТипКлюч YAMLОписание
НаименованиеСтрокаимя джобыИмя джобы в пайплайне
СтадияСтрокаstageСтадия выполнения
СкриптыМассивscriptКоманды — добавляйте через Скрипты.Добавить("...")
КогдаСтрокаwhenУсловие запуска. Сахар: СобытияПайплайна.ПриУспехе(), .РучнойЗапуск(), .ПриНеудаче(), .Всегда()
ТегиРаннераМассивtagsТеги раннера
ТаймаутСтрокаtimeoutНапример "2h", "30m"
ПрерываемыйБулевоinterruptibleОтмена при новом пуше
РазрешитьПадениеБулевоallow_failureНе валить пайплайн при падении
СтартоватьСразуБулевоneeds: []Немедленный старт, игнорируя стадии. Взаимоисключающее с Нуждается
ГруппаРесурсовСтрокаresource_groupСериализация запусков (deploy-джобы не должны бежать параллельно)

Пример

bsl
Задача.Наименование = "deploy-prod";
Задача.Стадия = "deploy";
Задача.Таймаут = "2h";
Задача.Прерываемый = Истина;
Задача.ГруппаРесурсов = "production";
Задача.Скрипты.Добавить("make deploy");

Нуждается (needs)

Массив имён джоб, от которых зависит запуск (DAG). Валидируется при генерации: ссылка на несуществующую джобу роняет генерацию с перечнем доступных.

bsl
Задача.Нуждается.Добавить("build");
Задача.Нуждается.Добавить("test");

Зависимости (dependencies)

Какие артефакты тащить из предыдущих стадий. Валидации нет (это отдельный механизм GitLab).

bsl
Задача.Зависимости.Добавить("build");

Образ (image)

bsl
Задача.Образ.Имя = "docker:latest";
Задача.Образ.УказатьПолитику("always");   // с валидацией
// или сахар:
Задача.Образ.Всегда();
Задача.Образ.Никогда();
Задача.Образ.ЕслиОтсутствует();
Задача.Образ.Принудительно();             // pull, GitLab/раннер >= 15.1
Задача.Образ.ДобавитьКомандуЭнтрипоинт("/bin/sh");

Сервисы (services)

Массив сервис-контейнеров, фабрика НовыйСервис():

bsl
База = Задача.НовыйСервис();
База.Имя = "postgres:14";
База.Алиас = "db";
База.ДобавитьПеременную("POSTGRES_PASSWORD", "secret");

Кэш (cache)

bsl
Задача.Кэш.ДобавитьПуть("vendor/");
Задача.Кэш.КлючПоФайлам.Добавить("packagedef");

Артефакты (artifacts)

bsl
Задача.Артефакты.ДобавитьПуть("dist/");
Задача.Артефакты.ДобавитьИсключение("dist/*.tmp");
Задача.Артефакты.ВремяХранения = "1 week";

Отчёты (reports)

Виды отчётов — через модуль ВидыОтчетов с валидацией:

bsl
Задача.Артефакты.ДобавитьОтчет(ВидыОтчетов.Юнит(), "junit.xml");
Задача.Артефакты.ДобавитьОтчет(ВидыОтчетов.САСТ(), "gl-sast-report.json");
Задача.Артефакты.ДобавитьОтчетПокрытия(ВидыОтчетов.Кобертура(), "coverage.xml");

Допустимые виды: Юнит, САСТ, ДАСТ, Дотенв, СканированиеЗависимостей, ПоискСекретов, КачествоКода, СканированиеКонтейнеров, САРИФ, ЦиклонДХ, Терраформ и другие — полный список в модуле ВидыОтчетов.os.

Повтор (retry)

bsl
Задача.Повтор.Повторы = 2;
Задача.Повтор.ДобавитьУсловие(УсловияПовтора.СбойСкрипта());
Задача.Повтор.ДобавитьУсловие(УсловияПовтора.СбойРаннера());
Задача.Повтор.ДобавитьКодВыхода(42);

Условия валидируются против набора GitLab (22 значения, см. УсловияПовтора.os). При нескольких условиях выводится массив, при одном — строка. Дубли сворачиваются.

Параллельность (parallel)

bsl
// Число копий
Задача.Параллельность.Количество = 5;

// Матрица: декартово произведение в одном ряду
Ряд = Новый Соответствие();
Ряд.Вставить("OS", ОС);
Ряд.Вставить("VERSION", Версии);
Задача.Параллельность.ДобавитьРяд(Ряд);

// Или независимые ряды
Задача.Параллельность.ДобавитьРядМатрицы("OS", ОС);

Число и матрица взаимоисключающие — одновременное задание роняет генерацию.

Окружение (environment)

bsl
Деплой.Окружение.Имя = "production";
Деплой.Окружение.УРЛ = "https://prod.example.com";
Деплой.Окружение.ПриОстановке = "stop-prod";
Деплой.Окружение.АвтоОстановка = "1 week";

// Стоп-джоба:
СтопДжоба.Окружение.Действие = ДействияОкружения.Остановка();

Валидации: недопустимое действие, пустое имя при заполненных остальных, ПриОстановке на несуществующую джобу.

Релиз (release)

bsl
Задача.Релиз.Тег = "$CI_COMMIT_TAG";
Задача.Релиз.Описание = "Что нового";
Задача.Релиз.Имя = "Версия 1.2.3";
Задача.Релиз.ДобавитьВеху("Milestone 1");
Задача.Релиз.ДобавитьСсылку("Установщик", "https://example.com/setup.exe");

Тег и описание обязательны — без них генерация падает с именем задачи.

GitLab Pages

bsl
// Джоба с именем "pages", стадия deploy
Страницы.Наименование = "pages";
Страницы.Стадия = "deploy";
Страницы.Страницы.Публиковать("dist");

publish автоматически добавляется в artifacts:paths (GitLab 17.10+). Валидации: pages без артефактов и не в стадии deploy роняют генерацию.

Переменные джобы

bsl
Задача.ДобавитьПеременную("BUILD_TYPE", "release");