mcpField
C
ci-cd-ops

ci-cd-ops

github.com/0xdarkmatterクラウド・DevOps7836 回インストール2 週間前に更新
リポジトリ

ci-cd-ops について

GitHub Actions のパイプラインを保守する開発者向けの CI/CD 運用リファレンスです。ワークフロー設定、リリース自動化、テスト、デプロイのパターンを扱います。

主な機能

  1. 01GitHub Actions のワークフロー構文リファレンス
  2. 02トリガーとパスフィルターのパターン
  3. 03キャッシュとマトリックス戦略
  4. 04シークレット管理と OIDC デプロイ
  5. 05テスト・デプロイ・タグリリースのテンプレート

活用シーン

  1. 01プルリクエストの自動テスト設定
  2. 02main へのマージ後のデプロイ設定
  3. 03バージョンや OS 別のビルド
  4. 04権限、キャッシュ、同時デプロイの問題調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill ci-cd-ops

インストール後、Claude Code で/ci-cd-opsを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

assets/
.gitkeep
references/
github-actions.md
release-automation.md
testing-pipelines.md
scripts/
.gitkeep

詳細

CI/CD 運用

GitHub Actions、リリース自動化ツール、テストパイプラインを使った継続的インテグレーション、継続的デリバリー、継続的デプロイの包括的なパターンです。

GitHub Actions クイックリファレンス

ワークフローファイルの構成
name: CI                          # Display name in Actions tab
on:                               # Trigger events
  push:
    branches: [main]
  pull_request:
    branches: [main]

permissions:                      # GITHUB_TOKEN scope (least privilege)
  contents: read
  pull-requests: write

concurrency:                      # Prevent duplicate runs
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

env:                              # Workflow-level environment variables
  NODE_VERSION: "20"

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ env.NODE_VERSION }}
          cache: npm
      - run: npm ci
      - run: npm test
主な構文要素
要素目的例
onイベントのトリガーpush、pull_request、schedule
jobs.<id>.runs-onランナーの選択ubuntu-latest、self-hosted
jobs.<id>.needsジョブの依存関係needs: [build, lint]
jobs.<id>.if条件付き実行if: github.event_name == 'push'
jobs.<id>.strategy.matrix並列実行するバリエーションnode-version: [18, 20, 22]
jobs.<id>.environmentデプロイ先environment: production
jobs.<id>.permissionsトークンの権限範囲contents: write
steps[*].usesアクションを使用uses: actions/checkout@v4
steps[*].runコマンドを実行run: npm test
steps[*].envステップの環境変数env: { CI: true }

トリガー選択ツリー

シナリオトリガー設定
すべての PR でテストを実行pull_requestbranches: [main]
main へのマージ時にデプロイpushbranches: [main]
バージョンタグでリリースpushtags: ['v*']
夜間ビルドschedulecron: '0 2 * * *'
手動デプロイworkflow_dispatchinputs: { environment: ... }
別のワークフローから呼び出しworkflow_callinputs:、secrets:
PR ラベルの変更時pull_requesttypes: [labeled]
Issue コメント時issue_commenttypes: [created]
リリース公開時releasetypes: [published]
パッケージのプッシュ時registry_packagetypes: [published]
トリガーフィルターのパターン
on:
  push:
    branches: [main, 'release/**']      # Branch patterns
    paths: ['src/**', '!src/**/*.test.*'] # Path filters (ignore tests)
    tags: ['v*']                          # Tag patterns
  pull_request:
    types: [opened, synchronize, reopened] # Default types
    paths-ignore: ['docs/**', '*.md']     # Ignore docs-only changes

キャッシュ戦略

エコシステムアクション/キーパス復元キー
Node(npm)cache: npm を指定した actions/setup-node自動自動
Node(pnpm)cache: pnpm を指定した actions/setup-node自動自動
Go モジュールcache: true を指定した actions/setup-go自動自動
Cargoactions/cache@v4~/.cargo/registry、targetcargo-${{ runner.os }}-${{ hashFiles('Cargo.lock') }}
pip/uvcache: pip を指定した actions/setup-python自動自動
Docker レイヤーdocker/build-push-actionbuildx キャッシュを使用type=gha または type=registry
Gradlecache: gradle を指定した actions/setup-java自動自動
Composeractions/cache@v4vendorcomposer-${{ hashFiles('composer.lock') }}
手動キャッシュの例
- uses: actions/cache@v4
  with:
    path: |
      ~/.cargo/bin
      ~/.cargo/registry
      ~/.cargo/git
      target
    key: cargo-${{ runner.os }}-${{ hashFiles('**/Cargo.lock') }}
    restore-keys: |
      cargo-${{ runner.os }}-

マトリックス戦略

strategy:
  fail-fast: false                    # Don't cancel siblings on failure
  max-parallel: 4                     # Limit concurrent jobs
  matrix:
    os: [ubuntu-latest, windows-latest, macos-latest]
    node-version: [18, 20, 22]
    include:                          # Add specific combos
      - os: ubuntu-latest
        node-version: 22
        coverage: true
    exclude:                          # Remove specific combos
      - os: windows-latest
        node-version: 18
動的マトリックス
prepare:
  runs-on: ubuntu-latest
  outputs:
    matrix: ${{ steps.set.outputs.matrix }}
  steps:
    - id: set
      run: echo "matrix=$(jq -c . matrix.json)" >> "$GITHUB_OUTPUT"

test:
  needs: prepare
  strategy:
    matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}

シークレット管理

スコープアクセス範囲用途
リポジトリシークレットリポジトリ内のすべてのワークフローAPI キー、トークン
環境シークレット対象の環境を指定したジョブ本番環境の認証情報
組織シークレット組織内で選択したリポジトリ共有サービスアカウント
OIDC トークンフェデレーション IDクラウドへのデプロイ(シークレットの保存不要)
シークレット管理のベストプラクティス
# Reference secrets - NEVER echo or log them
- run: deploy --token ${{ secrets.DEPLOY_TOKEN }}

# Mask custom values
- run: echo "::add-mask::$CUSTOM_SECRET"

# Use environments for deployment secrets
jobs:
  deploy:
    environment: production           # Requires approval + has secrets
    steps:
      - run: deploy --key ${{ secrets.PROD_API_KEY }}
クラウド向け OIDC(シークレットの保存不要)
permissions:
  id-token: write
  contents: read

steps:
  - uses: aws-actions/configure-aws-credentials@v4
    with:
      role-to-assume: arn:aws:iam::123456789:role/github-actions
      aws-region: us-east-1

よくあるワークフローパターン

プルリクエストでテストを実行
name: Test
on:
  pull_request:
    branches: [main]
concurrency:
  group: test-${{ github.head_ref }}
  cancel-in-progress: true
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: 20, cache: npm }
      - run: npm ci
      - run: npm run lint
      - run: npm test -- --coverage
main へのマージ時にデプロイ
name: Deploy
on:
  push:
    branches: [main]
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: production
    steps:
      - uses: actions/checkout@v4
      - run: npm ci && npm run build
      - run: npx wrangler deploy
        env:
          CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}
タグでリリース
name: Release
on:
  push:
    tags: ['v*']
permissions:
  contents: write
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with: { fetch-depth: 0 }
      - run: |
          gh release create ${{ github.ref_name }} \
            --generate-notes \
            --title "${{ github.ref_name }}"
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

よくある落とし穴

落とし穴問題解決策
浅いクローンgit describe が失敗し、履歴が不足しますfetch-depth: 0 を指定して actions/checkout@v4 を使用します
デフォルトの権限GITHUB_TOKEN はデフォルトで読み取り専用ですpermissions: を明示的に設定します
アクションのピン留め@main は警告なしに動作しなくなる場合がありますSHA(@abc123 または @v4)にピン留めします
フォークからの PR のシークレットフォークからの PR ではシークレットを利用できませんpull_request_target を慎重に使用します
同時デプロイ本番環境で競合状態が発生しますconcurrency: グループを使用します
古いキャッシュキャッシュが際限なく増加しますキーにロックファイルのハッシュを含めます
Node.js のバージョンsetup-node のデフォルト値は環境によって異なります常に node-version を指定します
Docker レイヤーキャッシュキャッシュなしではすべてを再ビルドしますcache-from: type=gha を使用します
マトリックスと環境マトリックスの各ジョブで承認が必要ですマトリックスの後に単一のデプロイジョブを使用します
パスフィルターと必須チェックスキップされたジョブによってマージがブロックされますpaths-filter アクションを使用するか、チェックを必須にしないようにします
PR 内の GITHUB_TOKEN他のワークフローをトリガーできませんPAT または GitHub App トークンを使用します
Windows の改行コードスクリプトが \r\n で失敗します.gitattributes または core.autocrlf を使用します

式構文のクイックリファレンス

式結果
${{ github.event_name }}push、pull_request など
${{ github.ref_name }}ブランチ名またはタグ名
${{ github.sha }}完全なコミット SHA
${{ github.actor }}トリガーしたユーザー
${{ runner.os }}Linux、Windows、macOS
${{ contains(github.event.head_commit.message, '[skip ci]') }}コミットメッセージを確認します
${{ needs.build.outputs.version }}前のジョブからの出力
${{ fromJson(steps.meta.outputs.json) }}JSON 出力を解析します
${{ hashFiles('**/package-lock.json') }}キャッシュキー用のハッシュ
${{ format('refs/heads/{0}', matrix.branch) }}文字列の書式設定
${{ toJson(matrix) }}デバッグ:マトリックス設定を出力します

ステップの出力

steps:
  - id: version
    run: echo "value=$(cat VERSION)" >> "$GITHUB_OUTPUT"

  - run: echo "Version is ${{ steps.version.outputs.value }}"
ジョブの出力(ジョブ間の通信)
jobs:
  build:
    runs-on: ubuntu-latest
    outputs:
      artifact-id: ${{ steps.upload.outputs.artifact-id }}
    steps:
      - id: upload
        run: echo "artifact-id=abc123" >> "$GITHUB_OUTPUT"

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - run: echo "Deploying ${{ needs.build.outputs.artifact-id }}"

リファレンスファイル

ファイル内容
references/github-actions.mdワークフロー構文、再利用可能なワークフロー、コンポジットアクション、OIDC、ランナー、デバッグの全般
references/release-automation.mdセマンティックバージョニング、semantic-release、changesets、goreleaser、変更履歴、公開
references/testing-pipelines.mdテスト段階、並列化、カバレッジ、サービスコンテナ、CI での E2E、デプロイパイプライン

コメント