💡

Renovate Regex Manager を用いた cloudflared の自動更新

に公開

はじめに

こんにちは。CyberAgent / CAM で SRE をしている mugi_o です。

本記事では、GitOps リポジトリにおいて Renovate の Regex Manager を活用し、cloudflared の Docker イメージバージョンを自動更新する仕組みを紹介します。

cloudflared の管理において、手動でのバージョン更新は運用負荷が高く、セキュリティアップデートの適用が遅れるリスクがあります。Renovate を活用することで、この課題を解決し、安全かつ効率的な運用を実現しました。

背景と課題

課題

Kubernetes で管理する cloudflared において、以下の課題がありました:

  1. バージョン管理の手作業: Docker イメージのタグを手動で更新する必要があり、運用負荷が高い
  2. アップデートの遅延: 新バージョンのリリースを検知して更新するまでにタイムラグが発生
  3. セキュリティリスク: セキュリティパッチの適用が遅れる可能性

解決策: Renovate Regex Manager

Renovate は依存関係の自動更新ツールとして広く知られていますが、標準のマネージャーでサポートされていない形式のバージョン指定に対しても、Regex Manager という機能で対応できます。

Regex Manager とは

Regex Manager は、正規表現を使って任意のファイルから依存関係のバージョン情報を抽出し、Renovate の管理対象とする機能です。

標準的なマネージャーでカバーされていないツール等の自動更新で大きな力を発揮します。

実装

ディレクトリ構造

example/
├── renovate.json5
├── k8s/
│   └── clusters/
│       └── example-cluster/
│           └── helm/
│               └── cloudflared/
│                   ├── helmfile.yaml
│                   └── values.yaml

1. values.yaml へのアノテーション追加

環境ごとの values.yaml に、Renovate が検出できるようにコメントアノテーションを追加します。

k8s/clusters/example-cluster/helm/cloudflared/values.yaml

image:
  # datasource=docker depName=cloudflare/cloudflared
  tag: "2025.11.1"

ポイント:

  • datasource=docker: Docker Hub からバージョン情報を取得
  • depName=cloudflare/cloudflared: Docker イメージ名
  • tag: "2025.11.1": 現在のバージョン(Renovate がこの値を更新対象として検出)

2. Renovate の Custom Manager 設定

renovate.json5 に Regex Manager の設定を追加します。

{
  // ...
  customManagers: [
    {
      customType: 'regex',
      fileMatch: ['^k8s/clusters/.*/helm/cloudflared/values\\.yaml$'],
      matchStrings: [
        '# datasource=(?<datasource>.*?) depName=(?<depName>.*?)\\s*tag: "(?<currentValue>.*)"',
      ],
    },
  ],
}

設定の詳細:

  • customType: 'regex': Regex Manager を使用
  • fileMatch: 検索対象ファイルのパターン(全環境のcloudflared values.yaml が対象)
  • matchStrings: 正規表現パターンで以下の Named Capture Group を抽出
    • datasource: データソース(docker)
    • depName: パッケージ名(cloudflare/cloudflared)
    • currentValue: 現在のバージョン(2025.11.1)

3. Package Rules の設定

cloudflared 専用のパッケージルールを追加し、自動マージを有効化します。

{
  packageRules: [
    {
      description: 'Auto PR creation and automerge for cloudflared',
      matchDepNames: ['cloudflare/cloudflared'],
      dependencyDashboardApproval: false,  // Dependency Dashboard での承認不要
      automerge: true,                      // CI 通過後に自動マージ
    },
  ],
}

動作フロー

実装後の自動更新フローは以下の通りです:

1. Cloudflare が新バージョンをリリース(例: 2025.11.1 → 2025.12.0)
   ↓
2. Renovate が Docker Hub から新バージョンを検出
   ↓
3. PR を作成
   ↓
4. CI 通過後、自動的にマージ
   ↓
5. Argo CD が変更を検知し、Kubernetes クラスタへ自動デプロイ

PR の例

まとめ

Renovate の Regex Manager を活用することで、標準マネージャーでサポートされていない cloudflared も自動更新できるようになりました。

今回は Kubernetes 上で管理している cloudflared を例に出しましたが、他のところでも流用可能なので気になった方はぜひ使ってみてください。

参考リンク

Discussion