GitHub Actionsのconcurrencyで同時実行を制御する

GitHub Actionsにはワークフローの同時実行を制御するための機能として concurrencyがある。 ワークフローだけでなく、ジョブの実行の同時制御を制御することもできる。

docs.github.com

docs.github.com

concurrencyには同時実行を制御する条件を指定する。 例えば固定文字列を指定すればあらゆる条件下で対象のワークフロー/ジョブの同時実行が制御される。 デプロイ操作のように同時に複数動作しては困る場合によさそう。

concurrency: staging_environment

変数を指定すれば、その変数ごとに同時実行を制御できる。 例えばブランチを指定する github.ref を指定すれば異なるブランチは並行して動作するが、同一ブランチは制御される。 ブランチごとに動作検証用の環境を構築する場合はブランチごとの同時制御を行う理由になりそう。

concurrency: ci-${{ github.ref }}

concurrencyに cancel-in-progress: true (default: false)を指定すれば先に実行中のジョブがキャンセルされる。 cancel-in-progressを指定する場合は、オプションなしに指定していた並列処理グループ名をgroupに指定する。 テストのように最新の内容で1度実行すれば十分なときによさそう。

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true