mcpField
G
github-actions

github-actions

github.com/bagelholeクラウド・DevOps1.2k391 回インストール23 週間前に更新
リポジトリ

github-actions について

GitHub リポジトリのワークフローを自動化する GitHub Actions のスキルです。CI/CD の設定、再利用可能なコンポーネント、セルフホストランナー、問題の調査を扱います。

主な機能

  1. 01push、PR、定期、手動トリガーの設定
  2. 02マトリックスビルドとジョブ依存関係の設定
  3. 03シークレット、変数、キャッシュの管理
  4. 04ビルド成果物のアップロードとダウンロード
  5. 05再利用可能なワークフローの作成
  6. 06セルフホストランナーの設定と実行のデバッグ

活用シーン

  1. 01リポジトリの CI/CD を構築
  2. 02複数の OS やバージョンでテスト
  3. 03環境別シークレットを使うデプロイワークフローの再利用
  4. 04未起動や権限不足のワークフローの調査

インストール

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

$npx skills add https://github.com/bagelhole/devops-security-agent-skills --skill github-actions

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

同梱ファイルreferences/workflow-patterns.md

詳細

GitHub Actions

GitHub Actions を使用して、GitHub リポジトリ内のソフトウェアワークフローを直接自動化します。

このスキルを使用するタイミング

次の場合にこのスキルを使用します。

  • GitHub リポジトリ用の CI/CD パイプラインを設定する
  • ビルド、テスト、デプロイのワークフローを自動化する
  • 再利用可能なワークフローコンポーネントを作成する
  • セルフホストランナーを設定する
  • ワークフローのシークレットと変数を管理する
  • 失敗したワークフローの実行をデバッグする

前提条件

  • 書き込みアクセス権のある GitHub リポジトリ
  • YAML 構文の理解
  • セルフホストランナーの場合:Docker を実行できるサーバー(任意)

ワークフローファイルの構成

ワークフローは .github/workflows/ ディレクトリで定義します。

name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'
          cache: 'npm'
      - run: npm ci
      - run: npm test

よく使用するトリガー

プッシュとプルリクエスト
on:
  push:
    branches: [main]
    paths:
      - 'src/**'
      - 'package.json'
  pull_request:
    branches: [main]
スケジュール実行
on:
  schedule:
    - cron: '0 2 * * *'  # Daily at 2 AM UTC
手動実行
on:
  workflow_dispatch:
    inputs:
      environment:
        description: 'Deployment environment'
        required: true
        default: 'staging'
        type: choice
        options:
          - staging
          - production

ジョブの設定

マトリックスビルド
jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        node-version: [18, 20, 22]
        os: [ubuntu-latest, windows-latest]
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: ${{ matrix.node-version }}
      - run: npm test
ジョブの依存関係
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: npm run build
      
  test:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - run: npm test
      
  deploy:
    needs: [build, test]
    runs-on: ubuntu-latest
    steps:
      - run: ./deploy.sh
環境の保護
jobs:
  deploy:
    runs-on: ubuntu-latest
    environment:
      name: production
      url: https://example.com
    steps:
      - run: ./deploy.sh

シークレットと変数

シークレットの使用
steps:
  - name: Deploy
    env:
      AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
      AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
    run: aws s3 sync ./dist s3://my-bucket
変数の使用
steps:
  - name: Build
    env:
      API_URL: ${{ vars.API_URL }}
    run: npm run build

依存関係のキャッシュ

- uses: actions/cache@v4
  with:
    path: ~/.npm
    key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
    restore-keys: |
      ${{ runner.os }}-node-

アーティファクト

アーティファクトのアップロード
- uses: actions/upload-artifact@v4
  with:
    name: build-output
    path: dist/
    retention-days: 5
アーティファクトのダウンロード
- uses: actions/download-artifact@v4
  with:
    name: build-output
    path: dist/

Docker ビルド

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Login to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      
      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: user/app:latest

再利用可能なワークフロー

再利用可能なワークフローの定義
# .github/workflows/reusable-deploy.yml
name: Reusable Deploy

on:
  workflow_call:
    inputs:
      environment:
        required: true
        type: string
    secrets:
      deploy_key:
        required: true

jobs:
  deploy:
    runs-on: ubuntu-latest
    environment: ${{ inputs.environment }}
    steps:
      - run: echo "Deploying to ${{ inputs.environment }}"
再利用可能なワークフローの呼び出し
jobs:
  deploy-staging:
    uses: ./.github/workflows/reusable-deploy.yml
    with:
      environment: staging
    secrets:
      deploy_key: ${{ secrets.STAGING_KEY }}

セルフホストランナー

ランナーの登録
# Download runner
mkdir actions-runner && cd actions-runner
curl -o actions-runner-linux-x64.tar.gz -L https://github.com/actions/runner/releases/download/v2.311.0/actions-runner-linux-x64-2.311.0.tar.gz
tar xzf actions-runner-linux-x64.tar.gz

# Configure
./config.sh --url https://github.com/OWNER/REPO --token TOKEN

# Run
./run.sh
セルフホストランナーの使用
jobs:
  build:
    runs-on: self-hosted
    steps:
      - uses: actions/checkout@v4

ワークフローのデバッグ

デバッグログの有効化

リポジトリのシークレットを設定します。

  • ACTIONS_RUNNER_DEBUG:true
  • ACTIONS_STEP_DEBUG:true
デバッグステップ
- name: Debug
  run: |
    echo "GitHub context: ${{ toJson(github) }}"
    echo "Job context: ${{ toJson(job) }}"

よくある問題

問題:ワークフローがトリガーされない

問題:プッシュ/PR 時にワークフローが実行されない
解決策:ブランチフィルターとパスフィルターを確認し、ワークフローファイルがデフォルトブランチにあることを確認します。

問題:権限が拒否される

問題:Actions がプッシュや PR の作成を実行できない
解決策:ワークフローで permissions を設定するか、リポジトリの設定を更新します。

permissions:
  contents: write
  pull-requests: write
問題:キャッシュが復元されない

問題:既存のキャッシュがあるにもかかわらず、キャッシュが見つからない
解決策:キャッシュキーが完全に一致することを確認し、ランナーの OS を確認します。

ベストプラクティス

  • アクションのバージョンは、特定のコミットまたはタグに固定します
  • 依存関係をキャッシュしてビルドを高速化します
  • 環境スコープを使用して、シークレットの露出を最小限に抑えます
  • クロスプラットフォームテストにはマトリックスビルドを使用します
  • continue-on-error を使用して適切なエラー処理を実装します
  • 再利用可能なワークフローとコンポジットアクションを使用して、ワークフローの重複を避けます

関連スキル

コメント