kuniku’s diary

はてなダイアリーから移行(旧 d.hatena.ne.jp/kuniku/)、表示がおかしな箇所はコメントをお願いします。記載されている内容は日付およびバージョンに注意してください。直近1年以上前は古い情報の可能性が高くなります。

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