Спустя некоторое время после написания первой статьи, где я ловко управлялся с jsonnet и гитлабом, я понял что пайплайны это конечно хорошо, но излишне сложно и неудобно. В большинстве случаев требуется типовая задача: "сгенерировать YAML и положить его в Kubernetes". Собственно, с чем Argo CD замечательно и справляется. Argo CD позволяет подключить Git-репозиторий и синкать его состояние в Kubernetes. По умолчанию есть поддержка нескольких видов приложений: Kustomize, Helm чарты, Ksonnet, голый Jsonnet или просто директории с YAML/JSON манифестами. Большинству пользователей этого набора будет достаточно, но не всем. Для того чтобы удовлетворить потребности всех и каждого в Argo CD имеется возможность использовать custom tooling. В первую очередь интересует возможность добавления поддержки qbec и git-crypt, которые с полна были рассмотренны в предыдущей статье. Прежде чем приступить к конфигурации, нужно сначала разобраться с тем как именно Argo CD работает. Для каждого добавленного приложения он имеет две фазы: Примечательно то, что Argo применяет этот подход для любого типа приложений, в том числе и для Helm. То есть в Argo CD Helm не занимается деплоем релизов в кластер, а используется только для генерации манифестов. Со своей стороны Argo умеет нативно обрабатывать Helm-хуки, что позволяет не нарушать логики применения релизов. Qbec позволяет удобно описывать приложения с помощью jsonnet, а кроме того имеет возможность рендерить Helm-чарты, а так как Argo CD умеет нормально обрабатывать Helm-хуки, то использование этой возможности с Argo CD позволяет добиться ещё более корректных результатов. Для того чтобы добавить поддержку qbec в argocd нужно две вещи: Первая задача решается довольно просто: (команда init не используется) Для добавления бинарников предлагается собрать новый образ, или использовать трюк с init-контейнером: Теперь посмотрим как будет выглядеть манифест нашего приложения: В переменной ENVIRONMENT мы передаём имя окружения для которого нужно выполнять генерацию манифестов. применим и посмотрим что у нас получилось:  приложение задеплоилось, отлично! Git-crypt позволяет настроить прозрачное шифрование репозитория. Это простой и безопасный способ хранить конфиденциальные данные прямо в git. С имплементацией git-crypt оказалось сложнее. Теоретически мы могли бы выполнять git-crypt unlock на init-стадии нашего custom-плагина, но это не очень удобно, так как не позволило бы использовать нативные методы деплоя. Например в случае Helm и Jsonnet, мы теряем гибкий GUI-интерфейс который позволяет упростить настройку приложения (values-файлы и прочее). Именно по этому хотелось выполнять распечатывание репозитория еще на более ранней стадии, при клонировании. Так как на данный момент Argo CD не предоставляет возможности для описания каких-либо хуков для синхронизации репозитория, пришлось обойти это ограничение хитрым шелл скриптом-обёрткой, который заменяет собой команду git: Argo CD выполняет git fetch каждый раз перед операцией деплоя. Именно на эту команду мы и повесим выполнение git-crypt unlock для разблокировки репозитория. для тестов можете использовать мой docker-образ в котором уже есть всё необходимое: Теперь нам нужно подумать о том, как Argo будет расшифровывать наши репозитории. А именно сгенерировать gpg-ключ для него: Сохраним имя ключа 8CB8B24F50B4797D для дальнейших шагов. Экспортируем сам ключ: И добавим его в виде отдельного секрета: Единственное что нам осталось, это пробросить его в контейнер argocd-repo-server, для этого отредактируем deployment: И заменим существующий gpg-keys volume на projected, где и укажем наш секрет: Argo CD автоматически подгружает gpg-ключи из этой директории при старте контейнера, таким образом он загрузит и наш приватный ключ. проверим: Отлично, ключ загружен! Теперь нам достаточно добавить Argo CD в наш репозиторий в качестве коллаборатора и он сможет автоматически расшифровывать его на лету. Импортируем ключ на локальный компьютер: Настроим уровень доверия: Добавим argo в качестве коллаборатора в наш проект: Ссылки по теме: Суперпользователь