GitHub Actionsの概要
GitHub Actionsは、コードプッシュやスケジュール、外部イベントによってトリガーされる自動化プロセスを定義できるサービスです。システム管理者にとっては、繰り返し行われるタスクをコード化し、自動化することが可能です。
ワークフローの構成要素
name: ワークフロー名
on: トリガー条件 # 例: push, scheduleなど
jobs: # ジョブのリスト
ジョブ名:
runs-on: 実行環境 # 例: ubuntu-latest
steps: # ステップのリスト
- name: ステップ名
uses: アクション参照 # 再利用可能なアクション
with: パラメータ設定
シナリオ1: サーバー設定の検証
Ansibleを使用してサーバー設定の検証を行います。
name: 設定検証ワークフロー
on:
schedule:
- cron: '0 0 * * *' # 毎日UTC午夜に実行
jobs:
validation:
runs-on: ubuntu-latest
steps:
- name: コード取得
uses: actions/checkout@v2
- name: Ansibleインストール
run: sudo apt-get update && sudo apt-get install -y ansible
- name: 設定検証実行
run: ansible-playbook -i inventory setup-validation.yml
env:
ANSIBLE_HOST_KEY_CHECKING: 'false'
ANSIBLE_VAULT_PASSWORD_FILE: .vault-pass
シナリオ2: 自動バックアップとログアーカイブ
Resticを使用して定期的にデータをバックアップし、オブジェクトストレージに同期します。
name: バックアップワークフロー
on:
schedule:
- cron: '30 2 * * *' # 毎日2時30分に実行
jobs:
backup:
runs-on: ubuntu-latest
steps:
- name: Resticインストール
run: |
curl -fsSL https://restic.net/install.sh | sudo bash
- name: バックアップ実行
run: |
restic backup /path/to/data \
--repo s3:s3.amazonaws.com/my-bucket \
--password-command "echo $RESTIC_PASSWORD"
env:
RESTIC_PASSWORD: ${{ secrets.RESTIC_PASSWORD }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
シナリオ3: Dockerイメージのビルドとプッシュ
Buildxを使用してマルチプラットフォーム対応のDockerイメージをビルドし、プライベートレジストリにプッシュします。
name: Dockerイメージビルドワークフロー
on:
push:
branches: [ main ]
paths: [ 'docker/**' ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: コード取得
uses: actions/checkout@v2
- name: Buildxセットアップ
uses: docker/setup-buildx-action@v2
- name: レジストリログイン
uses: docker/login-action@v2
with:
registry: myregistry.com
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: ビルドとプッシュ
uses: docker/build-push-action@v3
with:
context: ./docker
push: true
tags: myregistry.com/my-image:latest
シナリオ4: インフラストラクチャーモニタリングとアラート
PrometheusとGrafanaを使用してシステムモニタリングを行い、異常時にアラートを発します。
name: モニタリングワークフロー
on:
schedule:
- cron: '*/15 * * * *' # 15分ごとに実行
jobs:
monitor:
runs-on: ubuntu-latest
steps:
- name: Prometheusエクスポーターインストール
run: sudo apt-get update && sudo apt-get install -y prometheus-node-exporter
- name: CPU使用率チェック
run: |
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2}')
if (( $(echo "$CPU_USAGE > 80" | bc -l) )); then
echo "CPU使用率が80%を超えています: $CPU_USAGE%"
exit 1
fi
- name: アラート送信
if: failure()
uses: rtCamp/action-slack-notify@v2
with:
color: '#FF0000'
message: "CPU使用率が高すぎます: ${{ job.status }}"
webhook_url: ${{ secrets.SLACK_WEBHOOK_URL }}
シナリオ5: Terraformによるインフラストラクチャデプロイ
Terrateamを使用してGitOpsワークフローを実現し、クラウドリソースを自動的にデプロイします。
name: Terraformデプロイワークフロー
on:
push:
branches: [ main ]
paths: [ 'terraform/**' ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: コード取得
uses: actions/checkout@v2
- name: Terraformインストール
uses: hashicorp/setup-terraform@v2
with:
terraform_version: 1.6.0
- name: Terraform初期化
run: terraform init
working-directory: ./terraform
- name: Terraformバリデーション
run: terraform validate
working-directory: ./terraform
- name: Terraform適用
run: terraform apply -auto-approve
working-directory: ./terraform
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
ワークフローテンプレートとベストプラクティス
- 複雑なワークフローを制御するために
needsキーワードを使用する。 matrix戦略を使用して異なる環境でテストを並列実行する。actions/cacheを使用して依存関係のインストールを高速化する。- 機密情報を管理するためにGitHub Secretsを使用する。