← CI/CD
12 мин · просто · Урок 4 из 7

Анатомия пайплайна

Stages, jobs, runners, артефакты, кеш, переменные и секреты, окружения — общий словарь CI/CD.

Pipeline, stages, jobs

Эти три слова образуют базовый словарь, одинаковый почти во всех CI-системах (названия чуть отличаются, смысл тот же).

stage: build      stage: test                stage: deploy
  [build job]  ->  [unit] [lint] [types]  ->  [deploy job]
                   (параллельно)

Логика: собрали один раз, потом параллельно прогнали разные проверки, а если все зелёные, выкатили.

Когда стадии мешают

Последовательные стадии просты, но иногда заставляют ждать зря. Job линтинга не зависит от сборки, а всё равно стоит в очереди за ней.

Ключ needs: разрывает эту цепочку: job стартует, как только отработали перечисленные в нём job, независимо от стадии.

deploy:prod:
  stage: deploy
  needs: ["build"]        # ждём только build, а не всю стадию test
  script:
    - ./deploy.sh

Пайплайн из строгой лестницы превращается в граф зависимостей (DAG, directed acyclic graph). На больших пайплайнах это экономит минуты: независимые ветки идут параллельно вместо того, чтобы упираться в самый медленный job чужой стадии.

Ещё needs: умеет тянуть артефакты выборочно. Без него job получает артефакты всех предыдущих стадий; с ним берёт только от указанных job.

Runner: кто выполняет работу

Сами по себе jobs — это просто описание. Выполняет их runner - машина (или контейнер), которая берёт задачу, гоняет команды и рапортует результат.

Артефакты

Артефакт — файл(ы), которые job произвёл и которые нужны дальше: собранный бинарник, Docker-образ, директория dist/, отчёт о тестах.

CI умеет передавать артефакты между стадиями: build собрал dist/, deploy его забрал. Без этого каждая job стартует с пустого места и не видит результат предыдущей.

Не путать с кешем: кеш — это ускорение (сохранённые node_modules/зависимости между прогонами), его потеря не критична. Артефакт — это результат, он нужен по делу.

Переменные и секреты

Pipeline почти всегда нужны секреты: пароль к registry, SSH-ключ к серверу, токен API. Их нельзя хранить в репозитории.

CI-системы дают хранилище переменных (GitLab: Settings -> CI/CD -> Variables; GitHub: Secrets). Оттуда секрет подставляется в job как переменная окружения. Признаки правильно настроенного секрета:

Золотое правило: секрет живёт в хранилище CI, а не в .gitlab-ci.yml и не в коде.

Окружения (environments)

Environment — именованная цель деплоя: staging, production. CI-системы трекают, какая версия сейчас в каком окружении, и дают кнопки rollback/redeploy.

Типичная лестница: код едет сначала на staging (полная копия прода для проверки), и только потом в production.

Триггеры и правила

Pipeline запускается по событию: push в ветку, открытие/обновление merge request, по расписанию (cron, ночные сборки), вручную кнопкой, или по тегу (релиз).

Какие jobs на каком событии запускать, решает ключ rules: с условиями if. Типично: тесты гоняем на каждый MR, а деплой в прод запускаем только на push в main.

В старых конфигах и туториалах встречается only:/except:. Это legacy: GitLab не развивает эти ключи с версии 12.3, новые возможности появляются только в rules. Смешивать их в одном job нельзя, GitLab отвергнет конфиг. В новом коде пиши rules, старый переводи на него по мере правок.

Что важно запомнить

Pipeline -> stages (последовательно) -> jobs (внутри стадии параллельно). needs: ломает последовательность и превращает пайплайн в граф зависимостей: job стартует, как только готовы его зависимости.

Условия запуска пишут через rules. only/except — legacy, не развивается с 12.3.

Runner — машина/контейнер, которая реально выполняет job; обычно с нуля в чистом контейнере.

Артефакт — результат (бинарник, образ), передаётся между стадиями. Кеш - лишь ускорение.

Секреты живут в хранилище CI (masked + protected), никогда в репозитории.

Environment — цель деплоя (staging/production) с историей версий и откатом.

В следующем уроке разберём ландшафт инструментов: GitLab CI, GitHub Actions, Jenkins, Argo CD и в чём разница.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Чем stage отличается от job в пайплайне?

CICD-030
02

Чем артефакт отличается от кэша?

CICD-032
03

Где хранить секреты пайплайна (пароли, ключи)?

CICD-033

Прошли материал до конца? Отметьте урок пройденным.