Skip to main content

Using concurrency

Run a single job at a time.

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。

概要

注釈: ジョブレベルで並行処理が指定されている場合、ジョブの順序は保証されないか、互いに 5 分以内にそのキューを実行します。

jobs.<job_id>.concurrencyを使って、同じ並行処理グループを使う1つのジョブもしくはワークフローだけが実行されることを保証できます。 並行処理グループには、任意の文字列または式を使用できます。 式は、secrets コンテキストを除く任意のコンテキストを使用できます。 式に関する詳しい情報については「」を参照してください。

ワークフローレベルで concurrency を指定することもできます。 詳しい情報については、concurrency を参照してください。

並行ジョブもしくはワークフローがキューに入っている場合、リポジトリ内の同じ並行グループを使う他のジョブもしくはワークフローが進行中だと、キューイングされたジョブもしくはワークフローは保留中になります。 この並行グループ内の以前の保留中のジョブもしくはワークフローは、キャンセルされます。 同じ並行グループ内にある実行中のジョブもしくはワークフローもキャンセルするには、cancel-in-progress: trueを指定してください。

並行性とデフォルトの動作の使用例

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

並行性を使って進行中のジョブもしくは実行をキャンセルする例

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

例: フォールバック値の利用

特定のイベントに対してのみ定義されているプロパティでグループ名を構築した場合、フォールバック値を使用できます。 たとえばgithub.head_refpull_requestでのみ定義されています。 ワークフローがpull_requestイベントに加えて他のイベントにも反応するなら、構文エラーを避けるためにフォールバックを提供する必要があります。 以下の並行グループは、進行中のジョブをキャンセルするか、pull_requestイベントでのみ実行されます。github.head_refが未定の場合、この並行グループは一意であることが保証され、実行に対して定義される実行IDにフォールバックします。

concurrency: 
  group: ${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

例: 進行中のジョブをキャンセルするか、現在のワークフローに対して実行する

同じリポジトリに複数のワークフローを持っている場合、進行中のジョブがキャンセルされたり、他のワークフローから実行されたりすることを防ぐために、並行グループ名はワークフロー全体に対して一意でなければなりません。 そうでなかった場合、進行中あるいは保留されているジョブは、ワークフローに関係なくキャンセルされます。

同じワークフローで進行中の実行だけをキャンセルするには、並行グループの構築にgithub.workflowプロパティが利用できます。

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