LoginSignup
12
6

More than 3 years have passed since last update.

【GitHub Actions】workflow_runで呼び出し元のworkflowの結果を取得する

Last updated at Posted at 2020-10-25

概要

GitHub Actionsのトリガーにworkflow_runというものがあります。
workflow_runはあるworkflowが完了したり、呼び出されたら起動するイベントトリガーです。

問題点

workflow_runは呼び出し元の結果によって起動するかどうかをonのパラメータ中で指定できません。
なので、呼び出し元の結果がfailureでもcancelledでも起動します。

解決方法 (呼び出し元のworkflow結果の取得方法)

workflow_runの呼び元のworkflowの結果をジョブ内で取得します。
具体的な方法としては、${{ github.event.workflow_run.conclusion }}で取得します。conclusionが呼び元の結果です。

以下の例では呼び元のworkflow名をBuildとします。

name: Workflow Run Trigger

on:
  workflow_run:
    workflows:
      - Build
    types:
      - completed

jobs:
  main:
    name: Main job
    runs-on: ubuntu-latest
    # 呼び元のworkflowの結果がsuccessであればmain jobを実行
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    steps: ...

Use Case

スキップされるかもしれないジョブに依存しているジョブがあり、そのジョブは必ず実行したい場合に有効です。
例えば以下のように、ECSのデプロイでイメージビルドとサービスの更新のCDを分割させたいケースがあります。
ECSの1タスクで複数のイメージをビルド&プッシュケースでもneedsを多用せずにシンプルにworkflowを記述できるようになります。一つでもbuildに失敗すればデプロイは実行されませんし、あるイメージビルドがスキップしてもデプロイステージを実行できます。

plantuml (11).png

終わりに

needsで複雑になったworkflowやスキップジョブにも依存しているジョブがある場合はworkflow_runで分割して、それぞれでシンプルになるように工夫してみてはいかがでしょうか

Reference

12
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6