Полный .gitlab-ci.yml для Application-пакета
Что нужно знать перед уроком
- M9.05 — semver-теги и релизный процесс — нужна модель релизного процесса перед сборкой полного пайплайна
- M8.02 — Cache-репозитории — нужно понимание --cache-repo, используемого в build-стадии пайплайна
Что нужно знать перед уроком
Все предыдущие уроки M9 (1–5) — анатомия registry, линтеры, релизный процесс. M8 урок 2 — cache-репозитории. Этот урок собирает всё в единый, полный .gitlab-ci.yml.
Теория
Четыре стадии: setup → build → verify → publish
| |
dev vs prod registry — раздельные потоки публикации
Разделение переменных PACKAGE_BUILD_REPOSITORY/PACKAGE_BUILD_REPOSITORY_DEV отражает практическую необходимость: dev-публикации (на каждый коммит в main, с версией вида 0.0.0-dev.<short-sha>) предназначены для внутреннего тестирования и не должны попадать в каталог, видимый конечным пользователям, тогда как prod-публикации (только по семверным тегам, с ручным подтверждением) — это именно то, что появляется в каталоге Application-пакетов кластера. Смешение этих потоков в одном registry-пути рискует случайно «протечь» непроверенной dev-сборкой в production-каталог.
Переменные PACKAGE_BUILD_REPOSITORY* полностью
Разобранные в M5 уроке 9 переменные окружения, дублирующие флаги d8 package build:
| Переменная | Соответствующий флаг |
|---|---|
PACKAGE_BUILD_REPOSITORY | --repo |
PACKAGE_BUILD_REPOSITORY_USER | --user |
PACKAGE_BUILD_REPOSITORY_TOKEN | --token |
PACKAGE_BUILD_SIGN_CERT | --sign-cert |
PACKAGE_BUILD_SIGN_KEY | --sign-key |
Использование переменных вместо явных флагов в CI-скрипте — стандартная практика, позволяющая хранить чувствительные значения (_TOKEN, _KEY) как защищённые (Protected+Masked) переменные GitLab CI, не встраивая их в текст самого .gitlab-ci.yml.
Ручной gate на prod через when: manual
when: manual в publish-prod — это именно тот механизм, который реализует «осознанное решение человека», разобранное в M9 уроке 5: job появляется в интерфейсе GitLab CI как доступный к запуску, но не выполняется автоматически даже при успешном прохождении всех предыдущих стадий — ответственный релиз-менеджер должен явно нажать «Run» после финальной проверки.
Частые ошибки и подводные камни
- Публиковать dev- и prod-версии в один и тот же registry-путь. Это создаёт риск случайной публикации непроверенной сборки в production-каталог — необходимо явное разделение путей (как в примере, через отдельные переменные
_DEV). - Хранить
PACKAGE_BUILD_REPOSITORY_TOKEN/PACKAGE_BUILD_SIGN_KEYпрямо в тексте.gitlab-ci.yml. Эти значения должны быть настроены как защищённые CI/CD-переменные проекта GitLab, а не как захардкоженные строки в конфигурации, попадающей в git-историю. - Забывать
when: manualдля production-публикации. Без явного ручного gate любой пуш тега автоматически публикует версию в production-каталог, доступный конечным пользователям — без возможности финальной проверки перед публикацией. - Пропускать стадию
verifyпередpublish. Публикация без предварительной проверкиpkglintрискует опубликовать пакет с проблемами, которые линтер обнаружил бы (структура, документация, лицензии).
Практика в кластере
Практики в кластере в этом уроке нет — материал относится к конфигурации CI-пайплайна.
Практика разработки
Соберите полный .gitlab-ci.yml для пакета Umami по образцу из теории, настройте защищённые переменные (PACKAGE_BUILD_REPOSITORY_TOKEN и подобные) в настройках GitLab-проекта, и проведите полный цикл: коммит в main → dev-публикация → создание тега → ручной запуск publish-prod.
Шпаргалка команд урока
| |
Полная шпаргалка .gitlab-ci.yml для Application —
📋 werf
.
Вопросы для самопроверки
Смешение потоков рискует протечь непроверенной сборкой в production-каталог.
Источник: Рекомендуемая литература
Это реализация осознанного ручного gate на production-релиз.
Источник: Рекомендуемая литература
Хранение секретов в тексте конфигурации, попадающем в git-историю, — небезопасная практика.
verify — защитный барьер перед необратимой публикацией версии.
Источник: Рекомендуемая литература
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Готовим Gitea со вкусом werf CI/CD в кластере Deckhouse. Часть 3 — Flant на Habr.
- GitLab + K8s + Werf — Habr.
- Разворачиваем приложение в кластере Kubernetes под управлением Deckhouse c помощью werf — Flant на Habr.
Книги
- Gene Kim, Jez Humble, Patrick Debois, John Willis. The DevOps Handbook. 2nd ed., 2021. ISBN 978-1942788003.
Связанные материалы
- Предыдущий урок: M9.05 — semver-теги и релизный процесс.
- Следующий урок: M9.07 — Чеклист приёмки приложения и oss.yaml.
✓ Урок пройден — все вопросы самопроверки отвечены верно