ここで紹介している方法よりも、もっと楽に定義するには以下の記事を読んでください。
注意事項
この記事は、Notion AIに対して
- 問題と解決策の概要
- 例示用のコード
を渡して生成した実験的な記事になります。
はじめに
自宅k8sクラスタ用のマニフェストレポ home-apps はArgo CDで管理しており、各アプリケーションはHelm Chartを使ってリソースを作成しています。
ただアップデート時に手動でやるのが面倒なので、Renovateで自動アップデートを実現します。
Renovateをセットアップ
Renovateを利用することで、自動的にアプリケーションをアップデートできます。
公式ドキュメントを参考に、Renovateをセットアップします。
やることは、
になります。
導入ができたらRenovateのダッシュボードで確認できます。
マニフェスト構成
自動アップグレードに移る前にマニフェストレポの構成について、簡単に紹介します。 レポに含まれるマニフェストは、以下のような構成です。
argocd-config └── base ├── argocd.yaml ├── ingress-nginx.yaml ├── kustomization.yaml ├── metallb.yaml └── sealed-secrets.yaml
各ファイルは、Helm Chartを使ってリソースを作成するように定義しています。
以下は、argocd.yaml
の中身の抜粋です。
--- apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: argocd spec: ... source: chart: argo-cd repoURL: https://argoproj.github.io/argo-helm targetRevision: 5.31.0 helm: ...
自動アップグレードする
RenovateのregexManagersを使ってアップグレードすることができます。
各ApplicationごとにregexManagersを書くのは個人的な趣味として嫌なので、
targetRevision: 5.31.0 # renovate: depName=argoproj/argo-helm extractVersion=^argo-cd-(?<version>.+)$
というように、
- 対象のレポ
- リリースタグのフォーマット
を指定してRenovateの更新対象とします。
リリースタグのフォーマット
各Helm Chartを管理しているレポのリリースタグは、targetRevisionに指定するバージョン文字列だけではなく、Prefixがついていることが多いためextractVersionを使ってバージョンのみを抽出します。
以下は各レポのリリースタグのフォーマットです。
- Argo CD …
argo-cd-{VERSION}
- Ingress NGINX Controller …
helm-chart-{VERSION}
- Sealed Secrets …
helm-v{VERSION}
- MetalLB …
metallb-chart-{VERSION}
regexManagersを定義する
これらを踏まえて、regexManagersを定義します。
"regexManagers": [ { "datasourceTemplate": "github-releases", "fileMatch": [ "argocd-config/base/.*\\.yaml" ], "matchStrings": [ " +targetRevision: +(?<currentValue>[^'\" ]+) +# renovate: depName=(?<depName>[^ \\n]+) +(extractVersion=(?<extractVersion>[^\\n]+))?", ], }, ]
この定義を追加するだけで、マニフェストのHelm Chartのバージョンが自動更新の対象となります。
作成されたPRs
今回定義したregexManagersで更新対象となり、作成されたPRは以下です。
しっかりと作成されていて期待通りになりました。
おわりに
以上がArgo CDアプリケーションをRenovateで自動アップデートするための手順です。
これは他のものでも利用できるので活用してみてください。
参考
regexManagersの定義についてはaqua-renovate-configを参考にしています。