LoginSignup
3

More than 3 years have passed since last update.

GitHub ActionsからGAEにdeployする際のsecretの扱い

Last updated at Posted at 2020-05-13

概要

この記事の内容としては以下の通り

  • 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は消したほうが良いんじゃないかって思って消している

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3