werf следует принципам подхода IaC (Infrastructure as Code) и стимулирует пользователя хранить конфигурацию доставки проекта вместе с кодом приложения в Git и осознанно использовать внешние зависимости. Отвечает за это механизм под названием гитерминизм.
Типовая конфигурация проекта состоит из нескольких файлов:
- werf.yaml;
- одного или нескольких Dockerfile-файлов;
- Helm-чарта.
werf.yaml
Главный конфигурационный файл проекта в werf. Его основное предназначение — связывание инструкций для сборки и развёртывания.
Инструкции для сборки
Определяются для каждого компонента приложения. Могут быть представлены в двух форматах:
- Dockerfile-файлы, описывающие образы проекта.
- Stapel — альтернативный синтаксис для сборки.
Подробнее по конфигурации сборки смотрите в разделе «Сборка».
Инструкции развёртывания
Определяются для всего приложения (и всех окружений развёртывания) и должны быть представлены в виде Helm-чарта.
Подробнее по конфигурации развёртывания смотрите в разделе «Развёртывание».
Пример типовой конфигурации проекта
# werf.yaml
project: app
configVersion: 1
---
image: backend
context: backend
dockerfile: Dockerfile
---
image: frontend
context: frontend
dockerfile: Dockerfile
$ tree -a
.
├── .helm
│ ├── templates
│ │ ├── NOTES.txt
│ │ ├── _helpers.tpl
│ │ ├── deployment.yaml
│ │ ├── hpa.yaml
│ │ ├── ingress.yaml
│ │ ├── service.yaml
│ │ └── serviceaccount.yaml
│ └── values.yaml
├── backend
│ ├── Dockerfile
│ └── ...
├── frontend
│ ├── Dockerfile
│ └── ...
└── werf.yaml