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が更新されれば自動で最新になる。便利。