前提
- 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。
foo
や hoge
の箇所はそれぞれ「プロジェクト名」と「サービス名」を入れます。変数がごちゃごちゃするようならば、環境変数に設定するのも一つの手段です*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