{"id":93651,"date":"2020-09-08T07:42:45","date_gmt":"2020-09-08T05:42:45","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd"},"modified":"2020-09-08T07:42:45","modified_gmt":"2020-09-08T05:42:45","slug":"razbiraemsya-s-custom-tooling-v-argo-cd","status":"publish","type":"post","link":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd","title":{"rendered":"Uurime Custom Toolingut Argo CD-s","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Custom Tooling \u0432 Argo CD\" src=\"\/wp-content\/uploads\/2020\/09\/bc8e5704c18830315603b73c741e6403.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/post\/481662\/\">\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438<\/a><\/noindex>, \u0433\u0434\u0435 \u044f \u043b\u043e\u0432\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 jsonnet \u0438 \u0433\u0438\u0442\u043b\u0430\u0431\u043e\u043c, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e.<\/p>\n<p><\/p>\n<p>\u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: &quot;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes&quot;. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0447\u0435\u043c Argo CD \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f.<\/p>\n<p><\/p>\n<p>Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0438\u043d\u043a\u0430\u0442\u044c \u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432 Kubernetes. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0435\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u0438\u0434\u043e\u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439: Kustomize, Helm \u0447\u0430\u0440\u0442\u044b, Ksonnet, \u0433\u043e\u043b\u044b\u0439 Jsonnet \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441 YAML\/JSON \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430\u043c\u0438.<\/p>\n<p><\/p>\n<p>\u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435\u043c. \u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435\u0445 \u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432 Argo CD \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c custom tooling.<\/p>\n<p><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/481662\/\">qbec<\/a><\/noindex> \u0438 <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/481662\/#git-crypt\">git-crypt<\/a><\/noindex>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441 \u043f\u043e\u043b\u043d\u0430 \u0431\u044b\u043b\u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p><noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e Argo CD \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p><\/p>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043e\u043d \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u0435 \u0444\u0430\u0437\u044b:<\/p>\n<p><\/p>\n<ul>\n<li><strong>init<\/strong> \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u0434 \u0434\u0435\u043f\u043b\u043e\u0435\u043c, \u0437\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u0441\u0451 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e: \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0441\u0435\u043a\u0440\u0435\u0442\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u043e\u0435.<\/li>\n<li><strong>generate<\/strong> \u2014 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432, \u0432\u044b\u0432\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c YAML stream, \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u043e \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u043e, \u0447\u0442\u043e Argo \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f Helm. \u0422\u043e \u0435\u0441\u0442\u044c \u0432 Argo CD Helm \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043f\u043b\u043e\u0435\u043c \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0421\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b Argo \u0443\u043c\u0435\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c Helm-\u0445\u0443\u043a\u0438, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0435\u043b\u0438\u0437\u043e\u0432.<\/p>\n<h1 id=\"qbec\">QBEC<\/h1>\n<p><\/p>\n<p>Qbec \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e jsonnet, \u0430 \u043a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e \u0438\u043c\u0435\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u0442\u044c Helm-\u0447\u0430\u0440\u0442\u044b, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a Argo CD \u0443\u043c\u0435\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c Helm-\u0445\u0443\u043a\u0438, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441 Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 qbec \u0432 argocd \u043d\u0443\u0436\u043d\u043e \u0434\u0432\u0435 \u0432\u0435\u0449\u0438:<\/p>\n<p><\/p>\n<ul>\n<li>\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0435 Argo CD \u0434\u043e\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u0432\u0430\u0448 custom plugin \u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432.<\/li>\n<li>\u043d\u0443\u0436\u043d\u044b\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 <strong>argocd-repo-server<\/strong>.<\/li>\n<\/ul>\n<p><\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 <noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-cd\/user-guide\/config-management-plugins\/\" rel=\"nofollow\">\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f<\/a><\/noindex> \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e:<\/p>\n<p><\/p>\n<pre><code class=\"bash\"># cm.yaml\ndata:\n  configManagementPlugins: |\n    - name: qbec\n      generate:\n        command: [sh, -xc]\n        args: ['qbec show &quot;$ENVIRONMENT&quot; -S --force:k8s-namespace &quot;$ARGOCD_APP_NAMESPACE&quot;']<\/code><\/pre>\n<p><\/p>\n<p><em>(\u043a\u043e\u043c\u0430\u043d\u0434\u0430 <strong>init<\/strong> \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f)<\/em><\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ kubectl -n argocd patch cm\/argocd-cm -p &quot;$(cat cm.yaml)&quot;<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f <noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-cd\/operator-manual\/custom_tools\/#byoi-build-your-own-image\" rel=\"nofollow\">\u0441\u043e\u0431\u0440\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043e\u0431\u0440\u0430\u0437<\/a><\/noindex>, \u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-cd\/operator-manual\/custom_tools\/#adding-tools-via-volume-mounts\" rel=\"nofollow\">\u0442\u0440\u044e\u043a \u0441 init-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c<\/a><\/noindex>:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># deploy.yaml\nspec:\n  template:\n    spec:\n      # 1. Define an emptyDir volume which will hold the custom binaries\n      volumes:\n      - name: custom-tools\n        emptyDir: {}\n      # 2. Use an init container to download\/copy custom binaries into the emptyDir\n      initContainers:\n      - name: download-tools\n        image: alpine:3.12\n        command: [sh, -c]\n        args:\n        - wget -qO- https:\/\/github.com\/splunk\/qbec\/releases\/download\/v0.12.2\/qbec-linux-amd64.tar.gz | tar -xvzf - -C \/custom-tools\/\n        volumeMounts:\n        - mountPath: \/custom-tools\n          name: custom-tools\n      # 3. Volume mount the custom binary to the bin directory (overriding the existing version)\n      containers:\n      - name: argocd-repo-server\n        volumeMounts:\n        - mountPath: \/usr\/local\/bin\/qbec\n          name: custom-tools\n          subPath: qbec\n        - mountPath: \/usr\/local\/bin\/jsonnet-qbec\n          name: custom-tools\n          subPath: jsonnet-qbec<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"bash\">$ kubectl -n argocd patch deploy\/argocd-repo-server -p &quot;$(cat deploy.yaml)&quot;<\/code><\/pre>\n<p><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">apiVersion: argoproj.io\/v1alpha1\nkind: Application\nmetadata:\n  name: qbec-app\n  namespace: argocd\nspec:\n  destination: \n    namespace: default\n    server: https:\/\/kubernetes.default.svc\n  project: default\n  source: \n    path: qbec-app\n    plugin: \n      env: \n        - name: ENVIRONMENT\n          value: default\n      name: qbec\n    repoURL: https:\/\/github.com\/kvaps\/argocd-play\n  syncPolicy: \n    automated: \n      prune: true<\/code><\/pre>\n<p><\/p>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>ENVIRONMENT<\/strong> \u043c\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0438\u043c\u044f \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u043e\u0432.<\/p>\n<p><\/p>\n<p>\u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c:<\/p>\n<p><\/p>\n<p><img decoding=\"async\" alt=\"\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Custom Tooling \u0432 Argo CD\" src=\"\/wp-content\/uploads\/2020\/09\/69c4262f3503fb6e7eb169533872d726.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p><\/p>\n<p>\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043b\u043e\u0441\u044c, \u043e\u0442\u043b\u0438\u0447\u043d\u043e!<\/p>\n<h1 id=\"git-crypt\">git-crypt<\/h1>\n<p><\/p>\n<p>Git-crypt \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f. \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0434\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u044f\u043c\u043e \u0432 git.<\/p>\n<p><\/p>\n<p>\u0421 \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 git-crypt \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435.<\/p>\n<p><\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <strong><code>git-crypt unlock<\/code><\/strong> \u043d\u0430 init-\u0441\u0442\u0430\u0434\u0438\u0438 \u043d\u0430\u0448\u0435\u0433\u043e custom-\u043f\u043b\u0430\u0433\u0438\u043d\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u0435\u043f\u043b\u043e\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Helm \u0438 Jsonnet, \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u0433\u0438\u0431\u043a\u0438\u0439 GUI-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (values-\u0444\u0430\u0439\u043b\u044b \u0438 \u043f\u0440\u043e\u0447\u0435\u0435).<\/p>\n<p><\/p>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0440\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0435\u0449\u0435 \u043d\u0430 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u043d\u043d\u0435\u0439 \u0441\u0442\u0430\u0434\u0438\u0438, \u043f\u0440\u0438 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p><\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 Argo CD \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0445\u0443\u043a\u043e\u0432 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f, \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0445\u0438\u0442\u0440\u044b\u043c \u0448\u0435\u043b\u043b \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c-\u043e\u0431\u0451\u0440\u0442\u043a\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 git:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">#!\/bin\/sh\n$(dirname $0)\/git.bin &quot;$@&quot;\nec=$?\n[ &quot;$1&quot; = fetch ] &amp;&amp; [ -d .git-crypt ] || exit $ec\nGNUPGHOME=\/app\/config\/gpg\/keys git-crypt unlock 2&gt;\/dev\/null\nexit $ec<\/code><\/pre>\n<p><\/p>\n<p>Argo CD \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 <strong><code>git fetch<\/code><\/strong> \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043f\u0435\u0440\u0435\u0434 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 \u0434\u0435\u043f\u043b\u043e\u044f. \u0418\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043c\u044b \u0438 \u043f\u043e\u0432\u0435\u0441\u0438\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 <strong><code>git-crypt unlock<\/code><\/strong> \u0434\u043b\u044f \u0440\u0430\u0437\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f.<\/p>\n<p><\/p>\n<p>\u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kvaps\/argocd-git-crypt\" rel=\"nofollow\">\u043c\u043e\u0439 docker-\u043e\u0431\u0440\u0430\u0437<\/a><\/noindex> \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0441\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ kubectl -n argocd set image deploy\/argocd-repo-server argocd-repo-server=docker.io\/kvaps\/argocd-git-crypt:v1.7.3<\/code><\/pre>\n<p><\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0443\u043c\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a Argo \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438. \u0410 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c gpg-\u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u043d\u0435\u0433\u043e:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ kubectl exec -ti deploy\/argocd-repo-server -- bash\n\n$ printf &quot;%sn&quot; \n    &quot;%no-protection&quot; \n    &quot;Key-Type: default&quot; \n    &quot;Subkey-Type: default&quot; \n    &quot;Name-Real: YOUR NAME&quot; \n    &quot;Name-Email: YOUR EMAIL@example.com&quot; \n    &quot;Expire-Date: 0&quot; \n    &gt; genkey-batch \n\n$ gpg --batch --gen-key genkey-batch\ngpg: WARNING: unsafe ownership on homedir '\/home\/argocd\/.gnupg'\ngpg: keybox '\/home\/argocd\/.gnupg\/pubring.kbx' created\ngpg: \/home\/argocd\/.gnupg\/trustdb.gpg: trustdb created\ngpg: key 8CB8B24F50B4797D marked as ultimately trusted\ngpg: directory '\/home\/argocd\/.gnupg\/openpgp-revocs.d' created\ngpg: revocation certificate stored as '\/home\/argocd\/.gnupg\/openpgp-revocs.d\/9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D.rev'<\/code><\/pre>\n<p><\/p>\n<p>\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0438\u043c\u044f \u043a\u043b\u044e\u0447\u0430 <strong><code>8CB8B24F50B4797D<\/code><\/strong> \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0448\u0430\u0433\u043e\u0432. \u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u0441\u0430\u043c \u043a\u043b\u044e\u0447:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ gpg --list-keys\ngpg: WARNING: unsafe ownership on homedir '\/home\/argocd\/.gnupg'\n\/home\/argocd\/.gnupg\/pubring.kbx\n-------------------------------\npub   rsa3072 2020-09-04 [SC]\n      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D\nuid           [ultimate] YOUR NAME &lt;YOUR EMAIL@example.com&gt;\nsub   rsa3072 2020-09-04 [E]\n\n$ gpg --armor --export-secret-keys 8CB8B24F50B4797D<\/code><\/pre>\n<p><\/p>\n<p>\u0418 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0433\u043e \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\"># argocd-gpg-keys-secret.yaml\napiVersion: v1\nkind: Secret\nmetadata:\n  name: argocd-gpg-keys-secret\n  namespace: argocd\nstringData:\n  8CB8B24F50B4797D: |-\n    -----BEGIN PGP PRIVATE KEY BLOCK-----\n\n    lQVYBF9Q8KUBDACuS4p0ctXoakPLqE99YLmdixfF\/QIvXVIG5uBXClWhWMuo+D0c\n    ZfeyC5GvH7XPUKz1cLMqL6o\/u9oHJVUmrvN\/g2Mnm365nTGw1M56AfATS9IBp0HH\n    O\/fbfiH6aMWmPrW8XIA0icoOAdP+bPcBqM4HRo4ssbRS9y\/i\n    =yj11\n    -----END PGP PRIVATE KEY BLOCK-----<\/code><\/pre>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl apply -f argocd-gpg-keys-secret.yaml<\/code><\/pre>\n<p><\/p>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0442\u043e \u043d\u0430\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c, \u044d\u0442\u043e \u043f\u0440\u043e\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <strong>argocd-repo-server<\/strong>, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u0443\u0435\u043c deployment:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">$ kubectl -n argocd edit deploy\/argocd-repo-server<\/code><\/pre>\n<p><\/p>\n<p>\u0418 \u0437\u0430\u043c\u0435\u043d\u0438\u043c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 <strong>gpg-keys<\/strong> volume \u043d\u0430 <strong><code>projected<\/code><\/strong>, \u0433\u0434\u0435 \u0438 \u0443\u043a\u0430\u0436\u0435\u043c \u043d\u0430\u0448 \u0441\u0435\u043a\u0440\u0435\u0442:<\/p>\n<p><\/p>\n<pre><code class=\"plaintext\">   spec:\n     template:\n       spec:\n         volumes:\n         - name: gpg-keys\n           projected:\n             defaultMode: 420\n             sources:\n             - secret:\n                 name: argocd-gpg-keys-secret\n             - configMap:\n                 name: argocd-gpg-keys-cm<\/code><\/pre>\n<p><\/p>\n<p>Argo CD \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 gpg-\u043a\u043b\u044e\u0447\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043e\u043d \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 \u0438 \u043d\u0430\u0448 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447.<\/p>\n<p><\/p>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ kubectl -n argocd exec -ti deploy\/argocd-repo-server -- bash\n$ GNUPGHOME=\/app\/config\/gpg\/keys gpg --list-secret-keys\ngpg: WARNING: unsafe ownership on homedir '\/app\/config\/gpg\/keys'\n\/app\/config\/gpg\/keys\/pubring.kbx\n--------------------------------\nsec   rsa2048 2020-09-05 [SC] [expires: 2021-03-04]\n      ED6285A3B1A50B6F1D9C955E5E8B1B16D47FFC28\nuid           [ultimate] Anon Ymous (ArgoCD key signing key) &lt;noreply@argoproj.io&gt;\n\nsec   rsa3072 2020-09-03 [SC]\n      9A1FF8CAA917CE876E2562FC8CB8B24F50B4797D\nuid           [ultimate] YOUR NAME &lt;YOUR EMAIL@example.com&gt;\nssb   rsa3072 2020-09-03 [E]<\/code><\/pre>\n<p><\/p>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043a\u043b\u044e\u0447 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d! \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c Argo CD \u0432 \u043d\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043b\u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u043e\u043d \u0441\u043c\u043e\u0436\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u043b\u0435\u0442\u0443.<\/p>\n<p><\/p>\n<p>\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u044e\u0447 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ gpg --armor --export-secret 8CB8B24F50B4797D &gt; 8CB8B24F50B4797D.pem\n$ gpg --import 8CB8B24F50B4797D.pem<\/code><\/pre>\n<p><\/p>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0434\u043e\u0432\u0435\u0440\u0438\u044f:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ gpg --edit-key 8CB8B24F50B4797D\ntrust\n5<\/code><\/pre>\n<p><\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c argo \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043b\u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0430 \u0432 \u043d\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442:<\/p>\n<p><\/p>\n<pre><code class=\"bash\">$ git-crypt add-gpg-user 8CB8B24F50B4797D<\/code><\/pre>\n<p><strong>\u0421\u0441\u044b\u043b\u043a\u0438 \u043f\u043e \u0442\u0435\u043c\u0435<\/strong>:<\/p>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kvaps\/argocd-git-crypt\" rel=\"nofollow\">GitHub: \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0441 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-cd\/operator-manual\/custom_tools\/\" rel=\"nofollow\">Argo CD: Custom Tooling<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/argoproj.github.io\/argo-cd\/user-guide\/config-management-plugins\/\" rel=\"nofollow\">Argo CD: Config Management Plugins<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/gist.github.com\/vrillusions\/5484422\" rel=\"nofollow\">GitHub Gist: \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f gpg \u043a\u043b\u044e\u0447\u0435\u0439 \u0431\u0435\u0437 \u043f\u0430\u0440\u043e\u043b\u044f \u0432 \u043d\u0435\u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435<\/a><\/noindex><\/li>\n<\/ul>\n<p>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/517966\/\">habr.com<\/a> <\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u044f \u043b\u043e\u0432\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 jsonnet \u0438 \u0433\u0438\u0442\u043b\u0430\u0431\u043e\u043c, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: &quot;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes&quot;. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0447\u0435\u043c Argo CD \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0438\u043d\u043a\u0430\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":93652,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-93651","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u044f \u043b\u043e\u0432\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 jsonnet \u0438 \u0433\u0438\u0442\u043b\u0430\u0431\u043e\u043c, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: &quot;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes&quot;. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0447\u0435\u043c Argo CD \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0438\u043d\u043a\u0430\u0442\u044c\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"et_EE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Custom Tooling \u0432 Argo CD | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u044f \u043b\u043e\u0432\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 jsonnet \u0438 \u0433\u0438\u0442\u043b\u0430\u0431\u043e\u043c, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: &quot;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes&quot;. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0447\u0435\u043c Argo CD \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0438\u043d\u043a\u0430\u0442\u044c\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-09-08T05:42:45+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-09-08T05:42:45+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Uurime Argo CD Custom Tooling'ut | ProHoster","description":"M\u00f5ne aja p\u00e4rast p\u00e4rast esimese artikli kirjutamist, kus ma osavalt jsonnetiga ja gitlabiga toime tulin, sain aru, et pipeline'id on muidugi head, kuid liigsed keerukused ja ebamugavused. Enamasti on vajalik t\u00fc\u00fcpiline \u00fclesanne: \"genera YAML ja paigalda see Kubernetesesse\". Sellega tegeleb Argo CD suurep\u00e4raselt. Argo CD v\u00f5imaldab \u00fchendada Git-reposi ja s\u00fcnkroniseerida.","canonical_url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"et_EE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 Custom Tooling \u0432 Argo CD | ProHoster","og:description":"\u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438, \u0433\u0434\u0435 \u044f \u043b\u043e\u0432\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u0441 jsonnet \u0438 \u0433\u0438\u0442\u043b\u0430\u0431\u043e\u043c, \u044f \u043f\u043e\u043d\u044f\u043b \u0447\u0442\u043e \u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d\u044b \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0438\u0437\u043b\u0438\u0448\u043d\u0435 \u0441\u043b\u043e\u0436\u043d\u043e \u0438 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0412 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430: &quot;\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c YAML \u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0435\u0433\u043e \u0432 Kubernetes&quot;. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0441 \u0447\u0435\u043c Argo CD \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f. Argo CD \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c Git-\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0438 \u0441\u0438\u043d\u043a\u0430\u0442\u044c","og:url":"https:\/\/prohoster.info\/et\/blog\/administrirovanie\/razbiraemsya-s-custom-tooling-v-argo-cd","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-09-08T05:42:45+00:00","article:modified_time":"2020-09-08T05:42:45+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"93651","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 11:43:39","updated":"2022-09-28 13:16:47"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/93651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=93651"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/93651\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/93652"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=93651"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=93651"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=93651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}