😽

CloudRun × Artifact Registry × GitHub Actionsでデプロイを自動化

2023/06/11に公開

https://zenn.dev/minnanowp/articles/372f2ea53d147c

上記の記事で、DjangoとDockerを用いた開発環境の構築とCloud Runへデプロイを行いました。

今度は、GitHub Actionsを使ってmainブランチがpushされたら自動的にCloud Runへデプロイするようにします。

GitHub Actionsワークフロー用のYAMLファイルの作成

プロジェクトディレクトリ直下にGitHub Actionsワークフロー用のYAMLファイルの作成し、jobs定義します。

.github/workflows/deploy_to_cloudrun.ymlで作成します。

name: Deploy to Cloud Run

on:
  push:
    branches:
      - main

env:
  PROJECT_ID: ${{ secrets.GCP_PROJECT_ID }}
  SERVICE_NAME: ${{ secrets.SERVICE_NAME }}
  IMAGE: ${{ secrets.GCP_IMAGE }}
  REGION: ${{ secrets.GCP_REGION }}
  TAG: latest

jobs:
  setup-build-publish-deploy:
    name: Setup, Build, Publish, and Deploy.
    runs-on: ubuntu-latest

    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - id: "auth"
        uses: "google-github-actions/auth@v0"
        with:
          credentials_json: "${{ secrets.GCLOUD_AUTH }}"

      - name: Setup Google Cloud
        uses: google-github-actions/setup-gcloud@v1
        with:
          service_account_key: ${{ secrets.GCLOUD_AUTH }}
          project_id: ${{ secrets.PROJECT_ID }}

      - name: Configure Docker
        run: gcloud auth configure-docker asia-northeast1-docker.pkg.dev

      - name: Build
        run: docker build --platform linux/amd64 -f Dockerfile.prod -t asia-northeast1-docker.pkg.dev/$PROJECT_ID/$SERVICE_NAME/$IMAGE:$TAG .

      - name: Push
        run: docker push asia-northeast1-docker.pkg.dev/$PROJECT_ID/$SERVICE_NAME/$IMAGE:$TAG

      - name: Deploy
        run: gcloud run deploy $SERVICE_NAME --image asia-northeast1-docker.pkg.dev/$PROJECT_ID/$SERVICE_NAME/$IMAGE:$TAG --platform managed --region $REGION --allow-unauthenticated

サービスアカウントの作成

GCPコンソールの「IAMと管理」→「サービスアカウント」でサービスアカウントを作成します。

作成したサービスアカウントへ必要なロールを追加します。

以下のようなロール設定です。

必要なロールを追加

次にサービスアカウントの「キー」タブへ行き、「鍵の追加」の「新しい鍵を作成」で秘密鍵を作成します。

作成するとjson形式のファイルがダウンロードできますので、中身をコピーしておきます。

GitHubの設定

GitHubのプロジェクトリポジトリへ行き、「Settings」→「Secrets and variables」→「Actions」の「New repository secret」で環境変数を作成します。

Nameの方は「GCLOUD_AUTH」で、Secretには先ほどダウンロードしたjson形式の値をペーストします。

YAMLファイル内の「GCP_PROJECT_ID」、「SERVICE_NAME」、「GCP_IMAGE」、「GCP_REGION」などもプロジェクトの環境にあわせて設定します。

変数 値の例
GCP_PROJECT_ID django-project-1234
SERVICE_NAME django-project
GCP_IMAGE my-image
GCP_REGION asia-northeast1

デプロイの確認

mainブランチをpushしてみて、Cloud runへ自動的にデプロイされていることを確認します。

Discussion