Skip to content

Pipeliner

Pipeliner — библиотека для OneScript, которая генерирует .gitlab-ci.yml из декларативного описания на BSL.

Вместо ручного редактирования YAML вы описываете джобы кодом: с типами, автодоподсказками IDE, валидацией на этапе генерации и повторным использованием через обычные процедуры OneScript.

Зачем это нужно

YAML для CI/CD быстро разрастается: десятки джоб, копипаста, легко опечататься в ключе — и GitLab молча сделает не то, что вы хотели. Pipeliner решает это так:

  • Модель вместо текста — джоба это объект ОписаниеЗадачи с полями и методами. Ошиблись в имени метода — IDE подсветит, а не GitLab в продакшене.
  • Валидация при генерацииneeds проверяется на существование джоб, retry:when и виды отчётов на допустимые значения, environment на согласованность. Невалидный пайплайн не запишется на диск.
  • Идиома языка — общая конфигурация джоб выносится в обычную BSL-процедуру. Не нужны extends-шаблоны: язык уже умеет всё это лучше.

Быстрый старт

bsl
#Использовать pipeliner
#Использовать autumn
#Использовать oscript-yaml

Поделка = Новый Поделка();
Поделка.ЗапуститьПриложение();

Фабрика = Поделка.НайтиЖелудь("ФабрикаЗадач");

Сборка = Фабрика.Новая();
Сборка.Наименование = "build";
Сборка.Стадия = "build";
Сборка.Образ.Имя = "alpine:3.19";
Сборка.Скрипты.Добавить("make build");

Тесты = Фабрика.Новая();
Тесты.Наименование = "test";
Тесты.Стадия = "test";
Тесты.Нуждается.Добавить("build");
Тесты.Скрипты.Добавить("make test");

Генератор = Поделка.НайтиЖелудь("ГенераторПайплайнаГитлаб");
Генератор.СформироватьПайплайн(".gitlab-ci.yml");

Получится:

yaml
stages:
  - build
  - test
build:
  when: on_success
  stage: build
  tags: []
  image:
    name: alpine:3.19
  script:
    - make build
test:
  when: on_success
  stage: test
  tags: []
  needs:
    - build
  script:
    - make test

Установка

sh
opm install pipeliner

CLI

Библиотека имеет консольный интерфейс:

sh
pipeliner gitlab pipeline.yml

Подробности в разделе CLI.

Документация

Обратная связь

Issues: https://github.com/autumn-library/pipeliner/issues