В продолжение предыдущей статьи про инструменты деплоя в Kubernetes, хочу рассказать вам про то как можно использовать Jsonnet для упрощения описания джоб в вашем .gitlab-ci.yml
Дано
Есть монорепа, в которой:
10 Dockerfiles
30 описанных деплоев
3 окружения: devel, staging и production
Задача
Настроить пайплайн:
Сборка Docker-образов должна производиться по добавлении git-тэга с версией.
Каждая операция деплоя должна выполняться при пуше в ветку окружения и только по изменении файлов в конкретной директории
В каждом окружении установлен свой gitlab-runner с отдельным тэгом, который выполняет деплой только в своём окружении.
Не все приложения должны быть задеплоены в каждое из окружений, мы должны описать пайплайн так, чтобы иметь возможность делать исключения.
Некоторые деплойменты используют git submodule и должны запускаться с установленной переменной
GIT_SUBMODULE_STRATEGY=normal
Описать это всё может показаться настоящим адом, но мы не отчаиваемся и вооружившись Jsonnet сделаем это легко и непринуждённо.