GitHub Actions を用いて Cloud Run にデプロイする

前提

  • Dockerイメージは Artifact Registry に保存し、リージョンは asia-northeast1(東京)とします
  • Cloud Run のデプロイ先のリージョンは asia-northeast1(東京)とします

必要なもの

サービスアカウントの認証用 JSON ファイルが必要です。以下のような内容のものです。これをたとえば creds.json として保存しておきます。

{
  "type": "service_account",
  "project_id": "foo",
  "private_key_id": "123"",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEJzFg==\n-----END PRIVATE KEY-----\n",
  "client_email": "hoge@foo.iam.gserviceaccount.com",
  "client_id": "12345",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/hoge%40foo.iam.gserviceaccount.com"
}

GitHub Actions の Secrets creds.json の登録

GitHub のメニューから「Settings」→「Secrets」→「Actions」とたどっていき、Actions secrets のページで先ほどの JSON の内容を登録します。

名前はたとえば GCP_SERVICE_ACCOUNT_CREDENTIALS とします。

gh コマンドが使えるならば以下のようにするのが手っ取り早いです。

$ gh secret set GCP_SERVICE_ACCOUNT_CREDENTIALS < creds.json

YAML を書く

このような YAML になりました。

発火条件は main ブランチへの push(マージ)です。ただし、特定の tag がプッシュされたときは除きます*1

foohoge の箇所はそれぞれ「プロジェクト名」と「サービス名」を入れます。変数がごちゃごちゃするようならば、環境変数に設定するのも一つの手段です*2

name: cloud-run-sample

on:
  push:
    branches:
      - main
    tags-ignore:
      - 'v*.*.*'

jobs:
  deploy_to_cloud_run:
    name: Cloud Run にデプロイする
    runs-on: ubuntu-latest
    steps:
      - name: ソースコードをチェックアウトする
        uses: actions/checkout@v3
      - name: GCP の認証を行う
        uses: google-github-actions/auth@v0
        with:
          credentials_json: ${{ secrets.GCP_SERVICE_ACCOUNT_CREDENTIALS }}
      - name: GCP の CLI の認証を行う
        run: |
          gcloud auth configure-docker asia-northeast1-docker.pkg.dev
      - name: Docker イメージ をビルドする
        run: |
          docker build -t asia-northeast1-docker.pkg.dev/foo/cloud-run-source-deploy/hoge .
      - name: Docker イメージ をプッシュする
        run: |
          docker push asia-northeast1-docker.pkg.dev/foo/cloud-run-source-deploy/hoge
      - name: Cloud Run にデプロイする
        uses: google-github-actions/deploy-cloudrun@v0
        with:
          service: hoge
          image: asia-northeast1-docker.pkg.dev/foo/cloud-run-source-deploy/hoge
          region: asia-northeast1

*1:この部分は本題とは関係がない

*2:$GITHUB_ENV という予約語があり、echo HOGE=fugafuga >> $GITHUB_ENV という形で任意の step で代入すると、${{ env.HOGE }} で任意の step で呼び出すことができ、取り扱いが楽です

Powered by はてなブログ