GitHubActionsで実行中のワークフローをキャンセルして最新のみを実行する方法
はじめに
例えば、GitHubActionsのワークフローで以下のような状況があったとする。
develop
ブランチへのマージ時に変更内容をStaging環境へデプロイするワークフローを組んでいる- Staging環境は一つしかない
- GitHubActionsの利用枠はできるだけ節約したい
特にこのような場合は、すでにあるワークフローが実行中の状況で同一のワークフローが実行される場合に、直前のワークフローをキャンセルして最新のワークフローだけが実行されるようにしたい。そのための設定がGitHubActionsにもあったので残しておく。
設定方法
concurrency
のcancel-in-progress
をtrue
に設定することで実現できた。concurrency
によってワークフローやジョブの並列実行を制御することができる。
on:
push:
branches:
- develop
concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: true
group
によって同一の値を持つグループの並列実行を制御することができる。例えば、上記のようにdeploy-${{ github.ref }}
をグループ名とすることで、ブランチごとに並列実行の制御が可能になる。
また、concurrency
の設定はジョブごとに設定することもできる。
jobs:
some-job:
runs-on: ubuntu-latest
concurrency:
group: job-something
cancel-in-progress: true
おわり
これで無駄なワークフローの実行をキャンセルし、GitHubActionsの利用枠を節約することができた。
concurrency
に関する詳細は以下のドキュメントを参照されたい。