🎬

GitHub Actionsのjobを溜めないで最新を動かす

に公開

背景:GitHub Actionsのジョブがたまる

連続してPUSHすると、GitHub Actionsが溜まります。

新しくPUSHしたものだけCI/CDしてくれればいいのに、実行ジョブが溜まってきます。

以下のスクリーンショットではジョブが黄色の状態で溜まっているのがわかります。(スクリーンショットは溜め込んでいる極端な状態です)

対応:concurrencyを使用する

そんな時にconcurrencyを使用します。

以下がGitHubの公式の説明です。

コンカレンシーの使用 - GitHub Docs

設定方法

ワークフローファイルに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-progresstrueにすることで、連続してPUSHした際に最新のジョブだけが実行され、古いジョブは自動的にキャンセルされます。

実行結果

キャンセルされたジョブには、以下のようなメッセージが表示されます。

Canceling since a higher priority waiting request for 'deploy' exists

ジョブの詳細画面では以下のように表示されます。

GitHubで編集を提案

Discussion