前回、spring bootアプリをGAEにデプロイを。今回はgithub-actionsで自動デプロイ、CI/CDできるようにする。
端的に書くと、github-actionsでのやり方は、google-github-actions/deploy-appengine が使える。
大いに参考にさせていただきました:https://qiita.com/yuki2006/items/bef132274cb97d7e1c56
ただし、当初、app.yamlを下記のように配置していたが、リポジトリのルートに置かないと、どうしてもdeployが成功しなかった。app.yamlのディレクトリがルートディレクトリとなって、デプロイ対象のバイナリが見つからなくなってしまっているらしい。
github actionsのyaml (動かない)
- name: Deploy to App Engine
uses: google-github-actions/deploy-appengine@v0.4.0
with:
working_directory: ${{ github.workspace }}
deliverables: "src/main/appengine/app.yaml" # Does not success to deploy
credentials: ${{ secrets.GCP_SA_KEY }}
エラーログ
running: gcloud app deploy --quiet src/main/appengine/app.yaml --project projectx --promote
Error: Services to deploy:
descriptor: [/home/runner/work/projectx/projectx/src/main/appengine/app.yaml]
source: [/home/runner/work/projectx/projectx/src/main/appengine]
target project: [projectx]
target service: [default]
target version: [20210904t152600]
target url: [https://projectx.an.r.appspot.com]
target service account: [App Engine default service account]
Beginning deployment of service [default]...
Created .gcloudignore file. See `gcloud topic gcloudignore` for details.
╔════════════════════════════════════════════════════════════╗
╠═ Uploading 1 file to Google Cloud Storage ═╣
╚════════════════════════════════════════════════════════════╝
File upload done.
Updating service [default]...
.......................................................................................................................................................................................................................................................failed.
ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build 824014db-eb9d-477b-b7c2-838e6262a0da status: FAILURE
did not find any jar files with a Main-Class manifest entry
ソースコードを見てみたものの、今のところはapp.yamlをルートに置くか、jarファイルを同じディレクトリ以下に置くしかなさそう。
最終的には下記のようになった。
- jobをbuildとdeployに分けてみた
- deployするときにビルドしたjarが必要なので、upload/download-artifactsで受け渡し
- 前述の通り、app.yamlはルートに置いた
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v2
- name: Set up JDK 11
uses: actions/setup-java@v2
with:
java-version: '11'
distribution: 'adopt'
server-id: github # Value of the distributionManagement/repository/id field of the pom.xml
settings-path: ${{ github.workspace }} # location for the settings.xml file
- name: Build with Gradle
run: gradle build
- name: Upload deployment artifacts
uses: actions/upload-artifact@v2
with:
name: deployment-artifacts
path: build/libs
deploy:
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
runs-on: ubuntu-latest
needs: [build]
steps:
- uses: actions/checkout@v2
- name: Download deployment artifacts
uses: actions/download-artifact@v2
with:
name: deployment-artifacts
path: build/libs
- name: Deploy to App Engine
uses: google-github-actions/deploy-appengine@v0.4.0
with:
working_directory: ${{ github.workspace }}
deliverables: app.yaml
credentials: ${{ secrets.GCP_SA_KEY }}
これでmainにpushすると自動でPaaSデプロイまで実行され、CI/CD環境は整った。
途中デプロイ試行中に発生したエラー
デプロイ失敗のエラーで、App Engineに対する権限不足のエラーが出た。
ERROR: (gcloud.app.deploy) Your deployment has succeeded, but promoting the new version to default failed. You may not have permissions to change traffic splits. Changing traffic splits requires the Owner, Editor, App Engine Admin, or App Engine Service Admin role. Please contact your project owner and use the `gcloud app services set-traffic –splits <version>=1` command to redirect traffic to your newly deployed version.
ロール”Owner, Editor, App Engine Admin, or App Engine Service Admin”が必要とのことなので、「編集者」を追加。
コメント