Open6

GitHub ActionsでCloud Runにデプロイするまでの記録 〜2021 spring〜

rincerince

デプロイまでの流れ

  1. mainブランチへのpushをトリガーにGitHub Actionsが発火
  2. リポジトリをチェックアウト
  3. Google Cloud SDKをセットアップ
  4. DockerイメージをBuild
  5. Google Container Registryにイメージをpush
  6. Cloud Runにデプロイ
rincerince

事前準備

GCP

  • GCPのサービスアカウント作成
    • このページを参考に以下のロールを持ったGitHub Actions用のサービスアカウントを作成
      • Cloud Run 管理者
      • Cloud Run サービス エージェント
      • Cloud Build サービス アカウント
    • 将来的にGitHub Actions以外のCIを使う可能性もなくはないので名前は ci-deploy にしておいた
  • サービスアカウントのキーを発行
    • JSON形式を使用

GitHub Actions

  • GitHub SecretsにGCPのプロジェクトIDとサービスアカウントのキーを登録
    • GCP_PROJECTGCP_SA_KEY という名前で登録した
    • QiitaやZennの記事ではリージョンもSecretsに登録してるけど、秘匿情報でもないのでworkflowのYAMLに直接書いてよさそう
rincerince

ワークフローの作成

参考

実際に作成したYAML

on:
  push:
    branches:
      - main

name: Build and Deploy a Container
env:
  PROJECT_ID: ${{ secrets.GCP_PROJECT }}
  GCP_SA_KEY: ${{ secrets.GCP_SA_KEY }}
  SERVICE: example-app
  REGION: asia-northeast1
  IMAGE: gcr.io/${{ secrets.GCP_PROJECT }}/example-app:${{ github.sha }}

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Cloud SDK
        uses: google-github-actions/setup-gcloud@v0.2.0
        with:
          project_id: ${{ env.PROJECT_ID }}
          service_account_key: ${{ secrets.GCP_SA_KEY }}
          export_default_credentials: true  # Set to true to authenticate the Cloud Run action

      - name: Authorize Docker push
        run: gcloud auth configure-docker

      - name: Build and Push Container
        run: |-
          docker build . -t ${{ env.IMAGE }}
          docker push ${{ env.IMAGE }}

      - name: Deploy to Cloud Run
        id: deploy
        uses: google-github-actions/deploy-cloudrun@v0.4.0
        with:
          service: ${{ env.SERVICE }}
          image: ${{ env.IMAGE }}
          region: ${{ env.REGION }}
rincerince

無事デプロイできるようになりました 🎉