Advanced GitHub Actions

CI/CDの基本を超えて、複雑なパイプライン、機密情報管理、環境分離を学びます。

1. Multi-Stage Workflows (マルチステージ)

ビルド、テスト、デプロイを依存関係のある「Job」として分割します。`needs` キーワードを使います。

  • Artifacts: Job間でファイルを受け渡す (Build → Deploy)
  • Environment: 本番環境と検証環境で承認フローやSecretを変える
complex-workflow.yml
# .github/workflows/deploy.yml
name: CD Pipeline
on:
push:
tags: ['v*'] # Run on version tags
jobs:
build:
runs-on: ubuntu-latest
outputs:
script-file: ${{ steps.publish.outputs.script }}
steps:
- uses: actions/checkout@v4
- name: Build
run: npm run build
# Upload build artifact for next job
- uses: actions/upload-artifact@v4
with:
name: dist-files
path: ./dist
deploy:
needs: build # Depends on build job
runs-on: ubuntu-latest
environment: production # Uses 'production' environment secrets
steps:
- uses: actions/download-artifact@v4
with:
name: dist-files
- name: Deploy to S3
env:
AWS_ACCESS_KEY: ${{ secrets.AWS_ACCESS_KEY }}
run: aws s3 sync ./dist s3://my-bucket

2. Matrix Builds

異なるOSやNode.jsバージョンの組み合わせで並列テストを実行します。

strategy:
matrix:
os: [ubuntu-latest, windows-latest]
node: [18, 20]
steps:
- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node }}

3. Secrets & Variables

APIキーやパスワードは決してコードに含めてはいけません。GitHub Actions Secretsを使用します。

⚠️ Security Tip: `pull_request` イベントでSecretsを使う際は注意が必要です(外部からのPRで悪用されるリスク)。