Обычный цикл доставки приложений с werf выглядит как сборка образов, их публикация и последующее развертывание чартов, для чего бывает достаточно одного вызова команды werf converge
. Но иногда возникает необходимость разделить дистрибуцию артефактов (образы, чарты) и их развертывание, либо даже реализовать развертывание артефактов вовсе без werf, а с использованием стороннего ПО.
В этом разделе рассматриваются способы дистрибуции образов и бандлов (чартов и связанных с ними образов) для их дальнейшего развертывания с werf или без него. Инструкции развертывания опубликованных артефактов можно найти в разделе «Развертывание».
Пример дистрибуции образа
Для дистрибуции единственного образа, собираемого через Dockerfile, который потом будет развернут сторонним ПО, достаточно двух файлов и одной команды werf export
, запущенной в Git-репозитории приложения:
# werf.yaml:
project: myproject
configVersion: 1
---
image: myapp
dockerfile: Dockerfile
# Dockerfile:
FROM node
WORKDIR /app
COPY . .
RUN npm ci
CMD ["node", "server.js"]
werf export myapp --repo example.org/myproject --tag other.example.org/myproject/myapp:latest
Результат: опубликован образ приложения other.example.org/myproject/myapp:latest
, готовый для развертывания сторонним ПО.
Пример дистрибуции бандла
Для дистрибуции бандла для дальнейшего его развертывания с werf, подключения его как зависимого чарта или развертывания бандла как чарта сторонним ПО в простейшем случае достаточно трёх файлов и одной команды werf bundle publish
, запущенной в Git-репозитории приложения:
# werf.yaml:
project: mybundle
configVersion: 1
---
image: myapp
dockerfile: Dockerfile
# Dockerfile:
FROM node
WORKDIR /app
COPY . .
RUN npm ci
CMD ["node", "server.js"]
# .helm/templates/myapp.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- image: {{ $.Values.werf.image.myapp }}
werf bundle publish --repo example.org/bundles/mybundle
Результат: опубликован чарт example.org/bundles/mybundle:latest
и связанный с ним собранный образ.