🚀
appengineDeploy でデプロイする際に app.yaml 以外のファイルを追加する
この記事は…?
App Engine Gradle を GitHub Actions から使い GAE にデプロイする際に、環境変数として用意した secret.yaml
をインポートさせたい!と思って対応した方法の 1 つです。
問題点
以下のような secret.yaml
を base64 でエンコードして GitHub Actions の Secrets に保存、workflow でデコードするとします。
env_variables:
SECRET_KEY: secret
しかしこのファイル、app.yaml と並列に置いてもインポートされません…
対応案
そこで gradle を少し工夫してあげます。
task yamlCopy(type: Copy) {
from 'secret.yaml'
into 'build/staged-app'
}
appengineDeploy.dependsOn yamlCopy
まんまですが、appengineDeploy 実行前に yamlCopy というコピータスクを実行してあげます。
appengineDeploy では build/staged-app
配下の全てがアップロードされるため、事前にコピーしてあげれば ./gradlew appengineDeploy
で一緒にアップロードされるようになります。
複数ファイルをアップロードしたい
コピータスクなので、以下のように複数並べれば全てコピーされます。
task filesCopy(type: Copy) {
from 'secret.yaml'
from 'google-services.json'
into 'build/staged-app'
}
appengineDeploy.dependsOn filesCopy
最後に…
個人のアプリですが、私はこのような workflow でリリースしています。
name: release
on:
push:
tags:
- 'v*'
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Cache Gradle packages
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Set Up GCP Auth
uses: google-github-actions/setup-gcloud@master
with:
project_id: ${{ secrets.GCP_PROJECT_ID }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
- name: Setup secrets
run: |
echo "${{ secrets.SECRET_YAML }}" | base64 -d > secret.yaml
# タグからバージョン名を生成する
VERSION=$(echo ${{ github.ref }} | sed -e "s#refs/tags/##g" | sed -e 's/\./-/g')
sed -i -e "s/version_code/$VERSION/g" ext.gradle
- name: appengineDeploy
run: ./gradlew appengineDeploy
どなたかの参考になれば幸いです。
Discussion