前回に引き続き以下略。
jarファイルのビルドはコンテナの外で行う
ビルドをコンテナの中で行う場合、工夫がなければ毎回はじめからコンテナのビルドが走ります。これはパフォーマンス上好ましくないので、GitHub Actionsのキャッシュ用APIだとかRepository Cacheだとかを使ってビルド性能の改善を図れます:
ただGradleプロジェクトの場合はGradle自身が常に同じビルド結果を生成するように動作してくれますので(JVM toolchainとかreproducible buildsとかの話ね)、jarファイルのビルドはコンテナの外でやって Dockerfile
では COPY
するだけでも良さそうです。この場合は actions/setup-java
のキャッシュ機構やRemote Gradle Build Cacheなどを簡単に使えます。
pushとpull_requestで別のワークフローを使う
PR向けのGitHub Actions workflow runが走っているタイミングでPRをマージすると、push時に走るはずのGitHub Actions workflow runが実行されない!という問題があります。ワークフローを分けることで回避できるため push.yml
と pull_request.yml
とを別に定義してreusable workflowをコールする方法を採ると良さそうです。
# .github/workflows/push.yml on: push: branches: - main jobs: build: uses: ./.github/workflows/reusable-build.yml secrets: inherit deploy: uses: ./.github/workflows/reusable-deploy.yml secrets: inherit with: environment: production
# .github/workflows/reusable-deploy.yml name: Deploy run-name: Deploy ${{ github.sha }} to ${{ inputs.environments }} on: workflow_call: inputs: environment: ... jobs: deploy: runs-on: ubuntu-latest environment: ${{ inputs.environment }} permissions: ... steps: ...