github-actions について
GitHub リポジトリのワークフローを自動化する GitHub Actions のスキルです。CI/CD の設定、再利用可能なコンポーネント、セルフホストランナー、問題の調査を扱います。
主な機能
- 01push、PR、定期、手動トリガーの設定
- 02マトリックスビルドとジョブ依存関係の設定
- 03シークレット、変数、キャッシュの管理
- 04ビルド成果物のアップロードとダウンロード
- 05再利用可能なワークフローの作成
- 06セルフホストランナーの設定と実行のデバッグ
活用シーン
- 01リポジトリの CI/CD を構築
- 02複数の OS やバージョンでテスト
- 03環境別シークレットを使うデプロイワークフローの再利用
- 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:trueACTIONS_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を使用して適切なエラー処理を実装します- 再利用可能なワークフローとコンポジットアクションを使用して、ワークフローの重複を避けます
関連スキル
- gitlab-ci - GitLab CI/CD の代替手段
- docker-management - コンテナのビルド
- semantic-versioning - リリースの自動化
コメント
Markdown 対応