Skip to content

Go を Build して Cloud Run に Deploy する #3

Go を Build して Cloud Run に Deploy する

Go を Build して Cloud Run に Deploy する #3

Workflow file for this run

name: Go を Build して Cloud Run に Deploy する
on:
# push されたとき
# push:
# branches:
# - "main"
# 手動
workflow_dispatch:
inputs:
branch:
# ブランチを選択するオプション
description: 'Branch to deploy'
required: true
# デプロイ先が テスト環境 or 本番環境 で 異なるため
# Environment ごとに secret を設定(variables じゃない)
# repository secrets に書くと repository 全体で 共有できる
# secrets に設定する値
# - GCP_PROJECT_ID: Google Cloud プロジェクト ID
# - WIF_PROVIDER: Workload Identity 連携 のプロバイダ
# - WIF_SERVICE_ACCOUNT: Workload Identity 連携 の サービスアカウント
# - ARTIFACT_REPO_NAME: Artifact Registry のリポジトリ名
# - GAR_LOCATION: Artifact Registry の ロケーション
# - GCR_SERVICE_NAME: Cloud Run サービス名
# - GCR_REGION: Cloud Run サービスのリージョン
jobs:
deploy:
name: デプロイの job
environment: test-env
runs-on: ubuntu-latest
permissions:
contents: 'read'
id-token: 'write'
steps:
- name: コードの Checkout
id: checkout
uses: actions/checkout@v4
- name: Google Auth を行う
id: auth
uses: 'google-github-actions/auth@v2'
with:
token_format: 'access_token'
workload_identity_provider: '${{ secrets.WIF_PROVIDER }}'
# 例: projects/123456789/locations/global/workloadIdentityPools/my-pool/providers/my-provider
service_account: '${{ secrets.WIF_SERVICE_ACCOUNT }}'
# 例: [email protected]
# 開始 - Docker 認証とビルド
# (注: すでにコンテナイメージがある場合、これらのDockerステップは省略可能)
# Google Cloud Artifact Registry に Docker を認証
- name: GAR へ Login を行う
id: docker-auth-to-gar
uses: 'docker/login-action@v3'
with:
registry: '${{ secrets.GAR_LOCATION }}-docker.pkg.dev'
username: 'oauth2accesstoken'
password: '${{ steps.auth.outputs.access_token }}'
- name: image を Build する
id: image-build
run: |-
docker build -t "${{ secrets.GAR_LOCATION }}-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.ARTIFACT_REPO_NAME }}/${{ secrets.GCR_SERVICE_NAME }}:${{ github.sha }}" ./backend
- name: image を Push する
id: image-push
run: |-
docker push "${{ secrets.GAR_LOCATION }}-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.ARTIFACT_REPO_NAME }}/${{ secrets.GCR_SERVICE_NAME }}:${{ github.sha }}"
# 終了 - Docker 認証とビルド
- name: Cloud Run の metadata を作る
id: make-cloud-run-metadata
run: |-
export DOCKER_IMAGE="${{ secrets.GAR_LOCATION }}-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.ARTIFACT_REPO_NAME }}/${{ secrets.GCR_SERVICE_NAME }}:${{ github.sha }}"
export CR_SERVICE="${{ secrets.GCR_SERVICE_NAME }}"
export CR_REGION="${{ secrets.GCR_REGION }}"
export CR_PORT="${{ secrets.GCR_PORT }}"
envsubst < ./backend/cloud-run-service.template.yaml > cloud-run-service.yaml
# envsubst で 環境変数 を テンプレート に 埋め込んで cloud-run-service.yaml を 作成
- name: Cloud Run に Deploy する
id: deploy-to-cloud-run
uses: google-github-actions/deploy-cloudrun@v2
with:
service: ${{ secrets.GCR_SERVICE_NAME }}
region: ${{ secrets.GCR_REGION }}
metadata: cloud-run-service.yaml
# 注: 事前にビルドされたイメージを使用する場合、ここでイメージ名を更新
# image: ${{ secrets.GAR_LOCATION }}-docker.pkg.dev/${{ secrets.GCP_PROJECT_ID }}/${{ secrets.ARTIFACT_REPO_NAME }}/${{ secrets.GCR_SERVICE_NAME }}:${{ github.sha }}
# 必要に応じて、後続のステップで Cloud Run の URL 出力を使用
- name: Cloud Run の URL 出力
id: show-output
run: echo ${{ steps.deploy-to-cloud-run.outputs.url }}