CI/CD セットアップ

GitHub Actions を使って SteadyCron マニフェストのデプロイを自動化する — プルリクエストでのプラン差分表示、マージ時の適用。

プルリクエストごとに steadycron plan を実行し、マージ時に steadycron apply --prune を実行することで、マニフェストを GitOps ワークフローに変えることができます。レビュアーは PR が導入するクロンの変更を正確に確認でき、メインブランチが常に唯一の真実の情報源となります。

前提条件

  • SteadyCron の API キー(設定 → API キー で作成してください)
  • リポジトリにコミットされたマニフェスト(IaC への移行 を参照)

ステップ 1 — API キーをシークレットとして追加する

GitHub リポジトリで Settings → Secrets and variables → Actions に移動し、以下を追加します:

名前
STEADYCRON_API_KEYSteadyCron の API キー(sc_...

マニフェストが参照する環境固有のシークレット(例:SLACK_WEBHOOK_URL)も追加してください。

プランのみのパイプライン(読み取り操作)では、別途読み取り専用の API キーを作成し、PR ワークフローでのみ使用することができます。

ワークフロー 1 — プルリクエストでのプラン差分

マニフェストファイルが変更されるたびに、プランの出力を PR コメントとして投稿します:

# .github/workflows/cron-plan.yml
name: Cron plan

on:
  pull_request:
    paths:
      - 'manifests/**'

jobs:
  plan:
    runs-on: ubuntu-latest
    permissions:
      pull-requests: write
    steps:
      - uses: actions/checkout@v4

      - uses: steadycron/action@v1
        with:
          command: plan
          manifest: manifests/production.yaml
          comment-on-pr: 'true'
        env:
          STEADYCRON_API_KEY: ${{ secrets.STEADYCRON_API_KEY }}
          SLACK_WEBHOOK_URL:  ${{ secrets.SLACK_WEBHOOK_URL }}

action は次のようなコメントを投稿します:

SteadyCron plan — manifests/production.yaml

  ~ weekly-digest    update  retries: 2 → 3
  + invoice-cron     create  http  0 17 * * 5

  1 to create · 1 to update · 0 to delete

ワークフロー 2 — マージ時の適用

メインブランチが更新されるたびに、マニフェストを(--prune で)適用します:

# .github/workflows/cron-apply.yml
name: Cron apply

on:
  push:
    branches:
      - main
    paths:
      - 'manifests/**'

jobs:
  apply:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: steadycron/action@v1
        with:
          command: apply
          manifest: manifests/production.yaml
          prune: 'true'
        env:
          STEADYCRON_API_KEY: ${{ secrets.STEADYCRON_API_KEY }}
          SLACK_WEBHOOK_URL:  ${{ secrets.SLACK_WEBHOOK_URL }}

action の入力値

入力説明デフォルト
commandplanapplyvalidate、または syncplan
manifestマニフェストファイルまたはディレクトリへのパス
prunetrue の場合、apply--prune を渡すfalse
comment-on-prtrue の場合、プランの出力を PR コメントとして投稿するfalse

マニフェスト内のすべての ${ENV_VAR} プレースホルダーはジョブの環境から読み取られます — ワークフローステップの env: ブロックで渡してください。

複数環境の管理

マトリクスを使ってステージングと本番の別々のマニフェストを管理します:

jobs:
  apply:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        env: [staging, production]
    steps:
      - uses: actions/checkout@v4
      - uses: steadycron/action@v1
        with:
          command: apply
          manifest: manifests/${{ matrix.env }}.yaml
          prune: 'true'
        env:
          STEADYCRON_API_KEY: ${{ secrets[format('STEADYCRON_API_KEY_{0}', matrix.env)] }}

最小権限の API キー

プランのみのワークフロー(PR コメント)では、変更を加えられない読み取り専用の API キーを 使用してください。ダッシュボードで read スコープのみを持つ別のキーを作成し、別のシークレット (例:STEADYCRON_API_KEY_RO)として保存してください。

これにより、PR ワークフローのシークレットが漏洩した場合の影響範囲を限定できます。

すべての push でバリデーション

プランが実行される前にスキーマエラーを検出するために、バリデーションジョブを追加します:

- uses: steadycron/action@v1
  with:
    command: validate
    manifest: manifests/production.yaml
  env:
    STEADYCRON_API_KEY: ${{ secrets.STEADYCRON_API_KEY }}

validate はスキーマエラーがある場合にゼロ以外のコードで終了します。API キーは必須では ありませんが、提供するとサーバーがアカウントの現在の制限に対して検証を行えます。

関連ドキュメント