spring bootアプリをGithub ActionsでGoogleAppEngineに自動デプロイする

前回、spring bootアプリをGAEにデプロイを。今回はgithub-actionsで自動デプロイ、CI/CDできるようにする。

端的に書くと、github-actionsでのやり方は、google-github-actions/deploy-appengine が使える。

GitHub - google-github-actions/deploy-appengine: A GitHub Action that deploys source code to Google App Engine.
A GitHub Action that deploys source code to Google App Engine. - 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”が必要とのことなので、「編集者」を追加。

コメント

タイトルとURLをコピーしました