Clean Architecture, Clean Life

仕事・個人での技術的なことつぶやきます

【GithubActions】前のJobの実施状況によって次のジョブを実施するか判定する

経緯

前のJobが終わったとき(スキップされていない場合)のみ実行したいケースが何回かありました

当然前のJobと同じ条件をコピペすればいいのですが、このケースが何回も続けば変更箇所が増えるのでメンテナンス性が落ちてしまいます

なんで、できるだけコピペじゃないやり方ないかなと探して見つかったのでまとめておきたいと思います

方法

見てもらったほうが早いと思うので、サンプルを記載します

name: ANDROID_CI
on:
  push:
    branches:
      - develop
      - master
  pull_request:
    branches:
      - develop
      - master

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: debug build
      if: endsWith(github.ref, '/develop') || endsWith(github.base_ref , 'develop')
      id: debug_build
      run: ./gradlew assembleDebug
    - name: upload debug build
      if: steps.debug_build.conclusion != 'skipped'
      uses: actions/upload-artifact@v2
      with:
        name: debug_apk
        path: app

デバッグビルドはdevelopブランチでのみ実施 そのビルド処理が走ったときだけアップロード処理を走らせたい、というケースになっています

手順としては、ベースとしたい処理にidを振り、次に実施する処理の分岐として、steps.(ID名).conclusion != 'skipped'を登録する

そうすることで、実行されたときのみ実施されるようになります

ちなみにsteps.(ID名).conclusion == 'skipped'とすればスキップされたときだけ実行されるので、疑似if-else文を書くことができます

まとめ

こちらもよくあるケースかなと思い、備忘録としてまとめておきたいと思います

お役に立てると幸いです

今回も最後まで見てくださってありがとうございました