🚀

appengineDeploy でデプロイする際に app.yaml 以外のファイルを追加する

2022/03/24に公開

この記事は…?

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