🎬
GitHub Actionsのjobを溜めないで最新を動かす
背景:GitHub Actionsのジョブがたまる
連続してPUSHすると、GitHub Actionsが溜まります。
新しくPUSHしたものだけCI/CDしてくれればいいのに、実行ジョブが溜まってきます。
以下のスクリーンショットではジョブが黄色の状態で溜まっているのがわかります。(スクリーンショットは溜め込んでいる極端な状態です)

対応:concurrencyを使用する
そんな時にconcurrencyを使用します。
以下がGitHubの公式の説明です。
設定方法
ワークフローファイルにconcurrencyを追加します。以下の例では、deployというグループ名を設定し、古いジョブを自動的にキャンセルするようにしています。
name: Deploy
on:
push:
branches:
- main
concurrency:
group: deploy
cancel-in-progress: true
jobs:
deploy:
runs-on: ubuntu-latest
env:
HUGO_VERSION: ${{ github.sha }}
TZ: Asia/Shanghai
steps:
- name: Checkout
uses: actions/checkout@v3
# 以下、デプロイ処理
設定のポイント
-
group: 同時実行を制御するグループ名(任意の名前でOK) -
cancel-in-progress: true: 新しいジョブが開始されたら、実行中の古いジョブをキャンセルする
cancel-in-progressをtrueにすることで、連続してPUSHした際に最新のジョブだけが実行され、古いジョブは自動的にキャンセルされます。
実行結果
キャンセルされたジョブには、以下のようなメッセージが表示されます。
Canceling since a higher priority waiting request for 'deploy' exists
ジョブの詳細画面では以下のように表示されます。

Discussion