概要
この記事の内容としては以下の通り
- GAEのapp.yamlが環境変数を読み取らないので、値をなんとか渡す方法。
- GitHubActionsで認証ファイルを扱う方法。
ユースケースとして、GAEにGitHub Actionsを使ってdeployしたい
GAEのアプリケーションとしてはDBにつないで出力を返すものであるとする。
2020-05-28追記
サービスアカウントの部分は以下を見ると参考になる
https://github.com/GoogleCloudPlatform/github-actions/blob/0431cfb4b7b701d0b83c4df8ed9b72fd2c45b79c/example-workflows/gae/.github/workflows/app-engine.yml
実際の部分
GitHub ActionsのSecrets
以下のように入れる
そもそものGitHub ActionsのSecretsってなんだっていうのは 暗号化されたシークレットの作成と保存 を参照してください
名前 | 説明 |
---|---|
GAE_DEPLOY_CERT | deployする際のサービスアカウントの認証ファイルの中身 |
DB_USER | DBにつなぐユーザ |
DB_PASSWORD | DBにつなぐパスワード |
- ポイントとして、GAE_DEPLOY_CERTは入力する際には1行にすること。複数行にすると上手く行かない(shell力が足りない
GAEのapp.yaml
以下のようにユーザとパスワードを変数としておく
app.yaml
runtime: nodejs10
instance_class: F1
env_variables:
SQL_USER: "$DB_USER"
SQL_PASSWORD: "$DB_PASSWORD"
GitHub Actionsのworkflow
deploy.yml
name: deploy
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '10'
- name: npm install, build
run: |
npm install
npm run build
- name: replace app.yaml
run: |
sed -i -e 's/$DB_USER/${{ secrets.DB_USER }}/g' app.yaml
sed -i -e 's/$DB_PASSWORD/${{ secrets.DB_PASSWORD }}/g' app.yaml
- name: create certfile
run: |
echo '${{ secrets.GAE_DEPLOY_CERT }}' > cert.json
echo '対象のサービスアカウント' | gcloud auth activate-service-account --key-file cert.json
rm cert.json
- name: GAE deploy
run: gcloud app deploy app.yaml --project 'プロジェクトID' -q
env:
CI: true
細かい部分は省くが
- app.yamlをsedを使い先程の変数で書き換える
- secretの値をリダイレクトして、certのファイルを作成する
ということをしている
まとめ
CI/CD上でなんとかする以外思いつかなかったので、こんな感じになった。
サービスアカウントのjsonは消したほうが良いんじゃないかって思って消している