テクめも

プログラミング関連のちょっとしたTipsなどを書いています。

Github Actionsでジョブが成功したら次のジョブを実行する

テストが成功したらデプロイするみたいに、あるジョブの実行には前のジョブが成功が必要となるワークフローを書くには、needsを使うとできます。

name: build

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    # テストのステップ

  deploy:
    runs-on: ubuntu-latest
    needs: [test]
    steps:
    - uses: actions/checkout@master
    # デプロイのステップ

テストは毎回実行したいけど、デプロイはmasterブランチのみといったシナリオもよくあると思います。

on:
  push:
    branches:
      - master

jobs:
  # テストやデプロイのジョブ

のように書くと、masterブランチのみ実行されますが、ワークフロー単位では制御できません。(テストもmasterだけになります。)

そこで、ifを使うとmasterブランチのみ実行するステップを書くことができます。ジョブではなくステップでの制御なので、すべてのステップに書く必要があります。

name: build

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@master
    # テストのステップ

  deploy:
    runs-on: ubuntu-latest
    needs: [test]
    steps:
    - uses: actions/checkout@master
      if: contains(github.ref, 'master')
    # デプロイのステップ