werf

Облако и инфраструктураRU

Склеивает в один воспроизводимый конвейер то, что обычно живёт в bash-обвязке: git, сборку образов, реестр, выкат в Kubernetes и вашу CI-систему. Одна команда собирает недостающие слои, публикует образы и раскатывает только изменившееся, дожидаясь фактической готовности. Заодно решает задачу, которую пайплайны обычно не решают вовсе, — чистку реестра образов.

Флант

автор

Go

язык

Apache-2.0

лицензия

★ 4719

GitHub звёзд

Установка

# версия и канал задаются явно — это канон из документации
curl -sSL https://werf.io/install.sh | bash -s -- --version 2 --channel stable
# в CI — обязательно с --ci, иначе скрипт интерактивен
curl -sSL https://werf.io/install.sh | bash -s -- --version 2 --channel stable --ci
# или из пакетов
brew install werf

Скрипт делает больше, чем кажется: ставит клиент обновлений, подключает репозиторий подписей и дописывает автоактивацию в ваши файлы настроек оболочки. Флаг для CI всё это выключает — не трогает ни настройки оболочки, ни пути, ни группы. Ставить линию 3 не получится: релизы на GitHub есть, а в каналах доставки группы 3 нет ни одного канала.

Почему не пересобирается лишнее

Тег образа здесь — не номер сборки и не хеш коммита, а отпечаток содержимого: инструкций сборки и файлов контекста. Один и тот же контент в разных коммитах даёт один и тот же тег, а значит ни пересборки, ни повторного выката не происходит вовсе.

Кэш промежуточных слоёв лежит не на машине сборщика, а в самом реестре, поэтому он общий для всех исполнителей CI и не разъезжается между ветками. Параллельные сборки разводит встроенная синхронизация — слой публикует только одна из них.

Отдельное правило: конфигурация читается только из git. Это закрывает классическое «а тут я на раннере руками поправил» — повлиять на сборку чем-то вне репозитория нельзя.

Чистка реестра

Пайплайны копят теги годами, и вопрос «какие из сорока тысяч можно удалить» обычно остаётся без ответа. Здесь на него отвечают три правила: образ, который используется хоть одним объектом в подключённых кластерах, не удаляется никогда; свежесобранные живут заданное время; остальное чистится по истории git — сколько-то версий на последние теги и на самые активные ветки.

Важная оговорка из документации: удаляются теги, а место освобождает уже сборщик мусора самого реестра. И если доступа к кластерам нет, первое правило не работает — чистка перестаёт понимать, что используется.

Что нужно, чтобы начать

Для выката нужны кластер и репозиторий в реестре, а вот сборочная часть работает и без кластера — поэтому внедряют обычно поэтапно, начиная со сборки.

Демон Docker не обязателен: второй сборочный движок работает без демона и умеет непривилегированный режим. Он доступен на Linux и на Windows с подсистемой Linux; для macOS документация советует виртуальную машину.

Проект принят в CNCF Sandbox в декабре 2022 года, лицензия открытая, платных редакций нет. Любопытная деталь: ровно этот же код внутри консоли Deckhouse уже требует коммерческой лицензии платформы.

Частые вопросы

Нужен ли Kubernetes, чтобы начать пользоваться?

Для выката — да, кластер и репозиторий в реестре указаны в требованиях. Но сборка, экспорт и запуск работают без кластера, поэтому инструмент можно внедрять поэтапно, начав со сборки.

Обязателен ли Docker?

Нет. Сборочных движка два: системный демон Docker и встроенный, работающий без демона и с поддержкой непривилегированного режима. Второй доступен на Linux и на Windows с подсистемой Linux; для macOS документация рекомендует виртуальную машину.

Он заменяет Helm?

Он включает совместимый с Helm выкат и работает с обычными чартами и обычными релизами Helm, но покрывает и то, чего в Helm нет: сборку образов, теги по содержимому, общий кэш и чистку реестра. Сам движок выката — это Nelm.

Как он понимает, что пересобирать не нужно?

Тег образа — отпечаток содержимого: инструкций сборки и файлов контекста. Если содержимое не менялось, тег совпадает, и сборка с выкатом просто пропускаются. Кэш слоёв при этом лежит в реестре, то есть общий для всех исполнителей CI.

Какую версию ставить — вторую или третью?

Вторую. Релизы третьей линии на GitHub есть, но в каналах доставки группы 3 не существует ни одного канала, поэтому команда с третьей версией просто не отработает. Текущая стабильная — 2.75.3.

Теги

флантci/cdkuberneteshelmроссийские сервисы
github.com ↗← Все CLI инструментыРоссийские AI-агенты