Навигация
CI/CD: справочник
Полный справочник формата CI/CD: matrix, concurrency, retry, outputs, переменные
Управление параллельностью (concurrency)
concurrency:
group: deploy-$CI_COMMIT_BRANCH
cancel_in_progress: true
При новом запуске в той же группе - предыдущий автоматически отменяется.
Условие запуска (if)
jobs:
deploy:
if: $CI_COMMIT_BRANCH == "main"
steps:
- run: ./deploy.sh
notify-on-fail:
if: failure()
needs: [deploy]
steps:
- run: curl -X POST $SLACK_WEBHOOK
| Выражение | Описание |
|---|---|
$VAR == "value" | Сравнение строк |
$VAR != "value" | Неравенство |
$VAR =~ /pattern/ | Regex совпадение |
$VAR | Определена и не пуста |
!expr | Отрицание |
expr1 && expr2 | Логическое И |
expr1 || expr2 | Логическое ИЛИ |
success() | Все предыдущие jobs успешны |
failure() | Хотя бы один предыдущий job провалился |
always() | Всегда выполнять |
cancelled() | Pipeline был отменён |
Приоритет: || < && < сравнение < !
Rules (правила запуска)
rules:
- if: "$CI_PIPELINE_SOURCE == 'push' && $CI_COMMIT_BRANCH == 'main'"
when: always
- changes:
- "src/**"
- "*.rs"
when: manual
- when: never
Значения when: always, never, manual, on_success, on_failure.
Matrix (матричные сборки)
jobs:
test:
strategy:
matrix:
os: [ubuntu, alpine]
rust: ['1.80', '1.93', stable]
fail_fast: false
max_parallel: 4
image: rust:${{ matrix.rust }}
steps:
- run: cargo test
Генерирует job для каждой комбинации. Значения доступны через ${{ matrix.<ключ> }}.
include / exclude
strategy:
matrix:
os: [ubuntu, alpine]
rust: [stable, nightly]
include:
- os: ubuntu
rust: nightly
features: experimental
exclude:
- os: alpine
rust: nightly
Retry (автоповтор)
jobs:
test:
retry:
max: 2
when: [script_failure, stuck_or_timeout_failure]
steps:
- run: cargo test
Условия: script_failure, stuck_or_timeout_failure, always (пустой список = always).
allow_failure
jobs:
lint:
allow_failure: true
steps:
- run: cargo clippy -- -D warnings
timeout
jobs:
build:
timeout: 30m
steps:
- run: cargo build --release
Форматы: 30s, 10m, 1h, 1h30m. По умолчанию: 1h. Максимум: 6h.
interruptible
jobs:
test:
interruptible: true
steps:
- run: cargo test
При новом push в тот же ref - running job автоматически отменяется.
needs (DAG-зависимости)
jobs:
deploy:
needs:
- job: build
optional: false
- test
steps:
- run: ./deploy.sh
Поддержка optional: true - зависимость не ломает pipeline, если зависимый job был отфильтрован правилами.
Job outputs
Jobs могут передавать данные через файл $CI_OUTPUT:
jobs:
prepare:
steps:
- run: |
VERSION=$(cat VERSION)
echo "version=$VERSION" >> $CI_OUTPUT
deploy:
needs: [prepare]
steps:
- run: echo "Deploying $NEEDS_PREPARE_OUTPUTS_VERSION"
Предопределённые переменные
Коммит
| Переменная | Описание |
|---|---|
CI_COMMIT_SHA | Полный SHA коммита |
CI_COMMIT_SHORT_SHA | Первые 7 символов SHA |
CI_COMMIT_BRANCH | Ветка (при push в ветку) |
CI_COMMIT_TAG | Тег (при push тега) |
CI_COMMIT_REF_NAME | Полное имя ref (refs/heads/main или refs/tags/v1.0) |
CI_COMMIT_REF_SLUG | URL-safe slug ref (lowercase, макс 63 символа) |
CI_COMMIT_MESSAGE | Сообщение коммита |
Репозиторий
| Переменная | Описание |
|---|---|
CI_REPOSITORY_NAME | Имя репозитория |
CI_REPOSITORY_OWNER | Владелец |
CI_REPOSITORY_FULL_NAME | owner/repo |
CI_REPOSITORY_URL | HTTPS URL репозитория |
Pipeline
| Переменная | Описание |
|---|---|
CI | Всегда true |
CI_PIPELINE_ID | ID pipeline |
CI_PIPELINE_SOURCE | Источник (push, pull_request, schedule, web) |
CI_PIPELINE_URL | URL pipeline в интерфейсе |
Job
| Переменная | Описание |
|---|---|
CI_JOB_ID | ID текущего job |
CI_JOB_NAME | Имя текущего job |
CI_JOB_TOKEN | JWT-токен для доступа к Registry и API |
Container Registry
| Переменная | Описание |
|---|---|
CI_REGISTRY | Адрес Container Registry |
CI_REGISTRY_IMAGE | registry/owner/repo |
CI_REGISTRY_USER | Логин для Registry |
CI_REGISTRY_PASSWORD | Токен для Registry (= CI_JOB_TOKEN) |
CI_SERVER_URL | Базовый URL GitRiver |
Workspace
| Переменная | Описание |
|---|---|
CI_WORKSPACE | Рабочая директория |
CI_OUTPUT | Путь к файлу outputs |
Пулл-реквест
| Переменная | Описание |
|---|---|
CI_PULL_REQUEST_NUMBER | Номер PR |
CI_PULL_REQUEST_SOURCE | Исходная ветка |
CI_PULL_REQUEST_TARGET | Целевая ветка |
Переменные репозитория
Настраиваются в Settings / CI/CD / Variables:
- Name - имя
- Value - значение
- Masked - скрывать в логах (
[MASKED])
Приоритет переменных
- DB-переменные (из настроек репозитория)
- Глобальные
env:(верхний уровень workflow) - Job-уровень
env: - Предопределённые
CI_* - Интерполяция (разрешение цепочек
$A->$B-> значение, до 10 итераций) - Registry-переменные (
CI_REGISTRY_*)
4 уровня в иерархии: инстанс -> группа -> репозиторий -> окружение.
Множественные workflow-файлы
.gitriver/
workflows/
ci.yml
release.yml
nightly.yml
deploy.yml
Каждый файл - независимый workflow. При push GitRiver проверяет все файлы и запускает те, чьи on: совпадают.
Ограничения
| Параметр | Лимит |
|---|---|
| Workflow-файлов | 20 на репозиторий |
| Jobs на workflow | 50 |
| Steps на job | 100 |
Уровней needs | 10 |
| Matrix комбинаций | 256 |
| Таймаут job (макс) | 6 часов |
| Таймаут job (по умолчанию) | 1 час |
| Cron интервал (мин) | 15 минут |
| Паттернов в paths | 100 |