GitHub Actions で GAE に自動デプロイ
こんにちは開発チームの笠原です! 今回は 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 を行ってみます。
サービスアカウントの作成
- GCP コンソールからデプロイしたいプロジェクトに移動してIAMと管理
- サービスアカウント
- サービスアカウントを作成
- アカウント名などを入力
- 権限を付与
- 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
認証キーのダウンロード
- 作成したサービスアカウントの操作から鍵を管理
- 鍵を追加
- 新しい鍵を作成
- JSON で作成
GitHub シークレットに鍵情報を設定
- GitHub のリポジトリから Settings
- Secrets の Actions を選択
- ダウンロードした 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