🐥

GithubActionsで、特定のブランチにpushする度に自動でCloudRunにデプロイさせる

に公開

IAMアカウントの作成

gcloud iam service-accounts create github-actions-for-cloud-run \
  --display-name "GitHub Actions for Cloud Run"

権限を付与する

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member "serviceAccount:github-actions-for-cloud-run@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/run.admin"

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member "serviceAccount:github-actions-for-cloud-run@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/iam.serviceAccountUser"

gcloud projects add-iam-policy-binding YOUR_PROJECT_ID \
  --member "serviceAccount:github-actions-for-cloud-run@YOUR_PROJECT_ID.iam.gserviceaccount.com" \
  --role "roles/artifactregistry.writer"

認証キーの作成

gcloud iam service-accounts keys create key.json \
  --iam-account=github-actions-for-cloud-run@YOUR_PROJECT_ID.iam.gserviceaccount.com

これでローカルにkey.jsonが作成されるので大事に取っておく。

自動デプロイ用のコード

.github/workflows/deploy-production.yml を作成。
ディレクトリ名は固定だが、ファイル名はお好みで。

name: Deploy to Cloud Run

on:
  push:
    branches:
      - main

env:
  GCP_PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
  REPO_NAME: ${{ github.event.repository.name }}
  IMAGE: us-central1-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ github.event.repository.name }}/${{ github.sha }}

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Authenticate with Google Cloud
        uses: google-github-actions/auth@v2
        with:
          credentials_json: ${{ secrets.GOOGLE_CREDENTIALS }}

      - name: Configure Google Cloud SDK
        run: |
          gcloud auth configure-docker us-central1-docker.pkg.dev
          gcloud config set project $GCP_PROJECT_ID

      - name: Build and Push Docker Image
        run: |
          docker build --platform linux/amd64 -t $IMAGE .
          docker push $IMAGE

      - name: Deploy to Cloud Run
        run: |
          gcloud run deploy $REPO_NAME \
            --image $IMAGE \
            --region us-central1 \
            --platform managed \
            --allow-unauthenticated #← これがあると認証なしアクセスを許可する。

GitHubのSecretに登録

Githubのリポジトリを開く。

登録するのは以下。

GOOGLE_CREDENTIALS: さっきのkey.jsonの中身を登録する。
GCP_PROJECT_ID: さっきのプロジェクトIDを登録。

試す

早速試してみる。githubのmainブランチに何かしらコミットを積んでpush。

Githubのページを開き、アクションタブにて確認。
下記のようになっていれば成功。やったね。

今後もmainが更新されれば自動で最新になる。便利。

Discussion