GitHub Actions で GAE に自動デプロイ

  • #GitHub Actions
  • #GAE
  • #cd

こんにちは開発チームの笠原です! 今回は DevOps、CI/CD の CD、具体的には GitHub Actions で GAE(Google App Engine)にデプロイする手順を記事にしました。

CI/CD 違い?

本題に入る前にそもそも CI と CD の違いはなんでしょうか?

CI(Continuous Integration):継続的インティグレーション CD(Continuous Delivery または Deploy):継続的デリバリー

CI はビルドやテストまでが範囲で、CD はデプロイまで含みます。 要するに違いはカバーする範囲で CD の方が多くの範囲をカバーします。

やること

では本題で、やることは簡単です。

  • master ブランチに push したら prod にデプロイ
  • master ブランチ以外に push したら staging にデプロイ

次に前準備を行ってから実際に CD を行ってみます。

サービスアカウントの作成

  1. GCP コンソールからデプロイしたいプロジェクトに移動してIAMと管理
  2. サービスアカウント
  3. サービスアカウントを作成
  4. アカウント名などを入力
  5. 権限を付与
    • App Engine 管理者
    • サービス アカウント ユーザー
    • ストレージ管理者
    • Cloud Build 編集者
    • Cloud Scheduler 管理者(オプション、cloud scheduler が必要であれば)

API の有効化

下記を有効化しないと動作しないようです。

App Engine Admin API https://console.cloud.google.com/apis/library/appengine.googleapis.com

Cloud Build API https://console.cloud.google.com/apis/library/cloudbuild.googleapis.com

認証キーのダウンロード

  1. 作成したサービスアカウントの操作から鍵を管理
  2. 鍵を追加
  3. 新しい鍵を作成
  4. JSON で作成

GitHub シークレットに鍵情報を設定

  1. GitHub のリポジトリから Settings
  2. Secrets の Actions を選択
  3. ダウンロードした JSON の中身をコピーして GCP_SA_KEY としてシークレットに追加

GitHub Workflow でデプロイ

.github/workflows 以下の .yml ファイルにデプロイ手順を記述。

name: client-cd
on:
  push:

jobs:
  deploy:
    name: deploy
    runs-on: ubuntu-latest
    defaults:
      run:
        working-directory: ./client
    steps:
      - uses: actions/checkout@v3

      - name: Copy app.prod.yaml
        if: github.ref == 'refs/heads/master'
        run: cp app.prod.yaml app.yaml

      - name: Copy app.staging.yaml
        if: github.ref != 'refs/heads/master'
        run: cp app.staging.yaml app.yaml

      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '16'
          cache: 'yarn'

      - name: Enable yarn
        run: corepack enable yarn

      - name: yarn install
        run: yarn install

      - name: Build
        run: yarn build

      - name: gcloud auth
        id: auth
        uses: 'google-github-actions/auth@v0'
        with:
          credentials_json: '${{ secrets.GCP_SA_KEY }}'

      - name: Deploy to GAE
        id: deploy
        uses: 'google-github-actions/deploy-appengine@v0'
        with:
          working_directory: ./client
          deliverables: app.yaml
          promote: false
          version: v1


これで GitHub に push するたびに GAE に自動でデプロイされるようになります。

まとめ

デプロイスクリプトを用意したり、デプロイ用のコマンドのインストールなど余分な手間や時間の省けるようになります。

CURUCURU では新しい技術やサービス作りが好きなエンジニアを募集中です! 「ITで女性のライフスタイルを豊かにする」というミッションの元やりがいのあるサービス作りに携わる事ができます。

CURUCURU でエンジニアとして働くことに興味がある方はよければオンラインでカジュアルにお話しましょう! https://www.wantedly.com/companies/curucuru/projects

参考資料

https://levelup.gitconnected.com/ci-cd-from-github-to-gae-using-github-action-3586083fdb52 https://qiita.com/yuki2006/items/bef132274cb97d7e1c56