werf converge как единая точка входа
Что нужно знать перед уроком
- M8.06 — Distroless и минимизация размера — завершающий урок серии продвинутых тем Werf модуля M8
- M4.05 — Nelm CLI — нужно понимание отдельных команд release install, с которыми сравнивается converge
Что нужно знать перед уроком
M4 урок 5 — команды Nelm CLI по отдельности. M8 урок 4 — разделённый через bundle сценарий. Этот заключительный урок модуля M8 разбирает werf converge — единую команду, интегрирующую build и deploy.
Теория
werf converge — build + deploy одной командой
werf converge объединяет возможности werf build и деплоя (werf deploy/по сути обёртку над Nelm) в единую операцию: собирает образы (используя весь кэш и cache-repo из M8 урока 2), публикует их, и сразу применяет Helm/Nelm-чарт в целевой кластер — всё за один вызов команды. Это основной, рекомендуемый способ деплоя в «нормальном» сценарии, когда у CI-процесса есть непрерывный доступ и к git-репозиторию, и к целевому кластеру в рамках одного job’а.
| |
Раздельные шаги: werf build → werf converge --require-built-images
| |
Флаг --require-built-images инструктирует converge не пытаться выполнить сборку самостоятельно, а потребовать, чтобы все образы уже были собраны и опубликованы заранее (отдельным шагом werf build). Это разделение полезно, когда сборка и деплой должны быть раздельными этапами одного и того же CI-пайплайна (например, отдельные stage’ы build и deploy в .gitlab-ci.yml, позволяющие независимо перезапускать один из этапов без повторного выполнения другого, или явно разграничивающие права доступа джобов — сборочный джоб не должен иметь прав на деплой в кластер, и наоборот).
Сравнение трёх подходов деплоя
| Подход | Доступ к git нужен для | Когда использовать |
|---|---|---|
werf converge (единая команда) | Сборки и деплоя одновременно, в одном окружении | Типовой CI-релиз, простой пайплайн, разработка |
werf build → werf converge --require-built-images | Обоих шагов, но раздельно во времени/джобах | Разделение stage’ов build/deploy в одном пайплайне, независимый повторный запуск шагов |
werf bundle publish → werf bundle apply | Только на этапе publish; apply вообще не нуждается в git | Air-gapped деплой, полное организационное разделение CI и деплоя, деплой сторонним инструментом (M8 урок 4) |
Когда локальная разработка предпочитает раздельные шаги
Для локальной разработки, где код меняется часто, но образы пересобираются не при каждом изменении конфигурации Helm-чарта, разработчик может использовать отдельный nelm release install (без пересборки образов вообще) для быстрой итерации над templates//values.yaml, прибегая к полному werf converge только когда действительно нужно пересобрать изменившийся код приложения. Это ускоряет цикл разработки, избегая ненужных пересборок образов при чисто конфигурационных изменениях.
Частые ошибки и подводные камни
- Использовать
werf convergeтам, где организационно нужно разделение прав build/deploy. Единая команда неявно требует единого набора учётных данных с доступом и к сборке, и к кластеру — для более строгого разделения ролей нужны раздельные шаги или полныйbundle publish/bundle apply. - Забывать
--require-built-imagesпри разделении на раздельные шаги в CI. Без этого флагаconvergeможет попытаться пересобрать образы самостоятельно, что либо дублирует работу, либо (при отсутствии доступа к исходному коду на этапе деплоя) приведёт к ошибке. - Использовать полный
werf convergeдля каждой мелкой правки Helm-шаблона при локальной разработке. Это неоправданно замедляет цикл разработки, если образы приложения не менялись — быстрее использоватьnelm release installнапрямую для конфигурационных изменений.
Практика в кластере
| |
Затем внесите изменение только в values.yaml (без изменения кода приложения) и разверните его напрямую через Nelm, минуя пересборку:
| |
Сравните время выполнения обоих подходов и сделайте вывод о том, когда каждый из них уместен.
Практика разработки
Настройте в .gitlab-ci.yml пакета Vikunja два альтернативных сценария деплоя: единый werf converge для стандартного релиза и раздельные werf build/werf converge --require-built-images для сценария с разделением stage’ов, обсуждаемого в теории.
Шпаргалка команд урока
| |
Полная сводная таблица команд Werf — 📋 werf .
Вопросы для самопроверки
Это ключевой флаг для разделения шагов build и deploy в CI-пайплайне.
Источник: Werf — документация — Separate Build and Deploy Steps
Это разобрано в M8 уроке 4 — bundle apply полностью независим от git.
Источник: Рекомендуемая литература
Полный converge с пересборкой избыточен для чисто конфигурационных изменений.
Источник: Рекомендуемая литература
Converge — основная, рекомендуемая команда для типового CI-релиза.
Источник: Werf — документация — Reference
Рекомендуемая литература
Официальная документация
Статьи и блоги
- Вышла werf 2.0: новый движок развёртывания Nelm — Flant на Habr.
- werf v1.2 — Stapel и инкрементальная сборка — Flant на Habr.
- GitLab + K8s + Werf — Habr.
Книги
- Nigel Poulton. Docker Deep Dive. 2023. ISBN 978-1916585206.
Связанные материалы
- Предыдущий урок: M8.06 — Distroless и минимизация размера.
- Следующий модуль: M9 — Публикация: Registry, CI/CD, линтеры, урок 1.
✓ Урок пройден — все вопросы самопроверки отвечены верно