Go を Build して Cloud Run に Deploy する #1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Go を Build して Cloud Run に Deploy する | |
on: | |
# push されたとき | |
# push: | |
# branches: | |
# - "main" | |
# 手動 | |
workflow_dispatch: | |
inputs: | |
branch: | |
# ブランチを選択するオプション | |
description: 'Branch to deploy' | |
required: true | |
# デフォルトは develop ブランチ | |
default: 'develop' | |
# デプロイ先が テスト環境 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 }} |