GitHub ActionsのCI と maven(Java with Maven)その3
skip ci を取り入れる
- 参考 GitHub Actions で Skip CI を実現する - Qiita
- develop ブランチやfeatureブランチでpushをたくさんして、pushのたびに CI ・ビルドされると実行時間ばかり加算されてしまう
- push で CIされないようにすれば良いので、jobsでskipciの定義を追加し、その結果がtrueの場合にbuildが動くようにすれば良い
developブランチでのbuild+skip ciのサンプル
on: push: branches: [ develop ] pull_request: branches: [ develop ] jobs: skipci: runs-on: ubuntu-latest outputs: is_skip: ${{ steps.is_skip.outputs.is_skip }} steps: - name: Set is_skip id: is_skip run: echo "::set-output name=is_skip::${{ contains(github.event.head_commit.message, '[skip ci]') }}" - run: echo "[skip ci] ${{ steps.is_skip.outputs.is_skip }}" build: runs-on: ubuntu-latest needs: skipci if: ${{ ! needs.skipci.outputs.is_skip }} steps: - uses: actions/checkout@v2 - name: Set up JDK 1.7 uses: actions/setup-java@v1 with: java-version: 1.7 - name: Install ojdbc14-10.2.0.4.0.jar run: mvn install:install-file -Dfile=./foo-project/lib/ojdbc14-10.2.0.4.0.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0.4.0 -Dpackaging=jar - name: Cache Maven packages uses: actions/cache@v1 with: path: ~/.m2 key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} restore-keys: ${{ runner.os }}-m2 - name: Build with Maven run: mvn clean package -P dev -f ./foo-project/pom.xml - name: Archive WAR if: always() uses: actions/upload-artifact@v1 with: ......
説明
- skipciを定義し、pushのメッセージに、”skip ci”がcontains含まれているか判定し、その結果を後続が判定する
- build側で、「needs: skipci」とし、「if: ${{ ! needs.skipci.outputs.is_skip }}」のfalse(skip ci が含まれない)場合のみbuildを続行するようにする
実際にactionsが動く時間、1-2秒程度で skip ciまでの判定がされ後続が処理されなくなる
- echo することで、actionsの結果で以下のようなログがとれる
Set up job 0s Prepare all required actions Current runner version: '2.263.0' Operating System Virtual Environment Prepare workflow directory Prepare all required actions Set is_skip 1s shell: /bin/bash -e {0} Run echo "::set-output name=is_skip::true" echo "::set-output name=is_skip::true" shell: /bin/bash -e {0} Run echo "[skip ci] true"0s shell: /bin/bash -e {0} Run echo "[skip ci] true" echo "[skip ci] true" shell: /bin/bash -e {0} [skip ci] true Complete job 0s Cleaning up orphan processes Evaluate and set job outputs Set output 'is_skip' Cleaning up orphan processes