Jenkins の「Waiting for next available executor」と、ビルドが待ち行列から出ないほかの理由
始めたビルドは、まず Jenkins のビルドの待ち行列(Build Queue)に入り、それを動かしてよいエグゼキューター(実行枠)が空いたときに出ていきます。待っている間、Jenkins は理由を1行で持っています。この1行は見た目より細かく、どのエグゼキューターでもよいのを待っているのか、特定のノードか、ラベルの付いたノードか、エージェントがつながるのか、自分の前のビルドか、Jenkins のシャットダウンの取り消しかを言い分けています。
理由が見える場所
ダッシュボードの Build Queue の欄に待っているジョブが並び、ジョブ名にマウスを乗せると「Started by user …」・理由・待っている時間(「Waiting for 43 sec」)が出ます。REST API では同じ1行が why で、待っているビルドごとに1つです。手元の Jenkins 2.580.1 で、2026年10月28日に:
curl -s -g -u 'your-user-id:your-api-token' \
'https://jenkins.example.com/queue/api/json?tree=items[id,why,stuck,blocked,task[name]]'
{"items":[
{"id":5,"blocked":true,"stuck":false,"task":{"name":"slow"},"why":"Build #1 is already in progress (ETA: N/A)"},
{"id":3,"blocked":false,"stuck":true,"task":{"name":"on-windows"},"why":"‘agent1’ is offline"},
{"id":2,"blocked":false,"stuck":true,"task":{"name":"on-linux"},"why":"There are no nodes with the label ‘linux’"},
{"id":1,"blocked":false,"stuck":false,"task":{"name":"hello"},"why":"Waiting for next available executor on ‘Built-In Node’"}]}
-g が要ります。無いと curl が角かっこを自分の書式として読み、Jenkins に何も聞かずに「URL malformed」(終了コード 3)で止まります。API で始めたビルドには自分の住所があり、201 の答えの Location ヘッダー(/queue/item/1/)です。待っている間は /queue/item/1/api/json にも同じ why があります。
Accept-Language: ja で聞くと、同じ4件はこう返りました:
ビルド #1 は既に実行中です。 (予定時間: N/A) agent1 はオフラインです。 There are no nodes with the label ‘linux’ masterで利用可能な次のエグゼキューターを待っています。
ラベルの行は訳が無く英語のまま、組み込みノード(Built-In Node)は日本語の訳では古い呼び名の「master」のままでした。
それぞれの意味
- 「Waiting for next available executor」(利用可能な次のエグゼキューターを待っています。):空いたエグゼキューターが無く、Jenkins はノードの名前を挙げていません。手元の Jenkins では、エージェントが1台も無く組み込みノードのエグゼキューターが 0 の間、待っているビルドが全部これを言いました。どのノードも持っていないラベル
linuxに限ったジョブも同じでした:エージェントが無いと、Jenkins はラベルの話をしません。Manage Jenkins → Nodes で、ノードごとのエグゼキューターの数(組み込みノードは 0 が推奨の形で、その場合ビルドには必ずエージェントが要ります)と、エージェントがつながって空いているかを見ます。API なら(手元で後から、組み込みノードにエグゼキューターを1つ与えた後。エージェント2台は一度もつながっていません):
curl -s -g -u 'your-user-id:your-api-token' \
'https://jenkins.example.com/computer/api/json?tree=computer[displayName,offline,numExecutors,idle]'
{"computer":[
{"displayName":"Built-In Node","idle":false,"numExecutors":1,"offline":false},
{"displayName":"agent1","idle":true,"numExecutors":1,"offline":true},
{"displayName":"agent2","idle":true,"numExecutors":1,"offline":true}]}
(Accept-Language: en のとき。ヘッダーなしで日本語の Jenkins に聞くと、組み込みノードの displayName は「master」でした。)
- 「Waiting for next available executor on ‘Built-In Node’」(‘エージェント名’ や ‘ラベル’ のことも):そのビルドが動いてよいのはそこだけで、そこのエグゼキューターが全部ふさがっているか、1つも無いかです。手元では、組み込みノードに結び付いたジョブで、エージェントを1台足した後に出ました(組み込みノードのエグゼキューターは 0 のまま)。何台かが共有するラベルも同じ形で名前が出ます。
- 「There are no nodes with the label ‘linux’」:ジョブがラベルに限られていて(Restrict where this project can be run、Pipeline なら
agent { label 'linux' })、そのラベルを持つノードがありません。打ち間違い、エージェント側でラベルを変えた、クラウドの設定がまだ、など。待っても消えません:Jenkins はこのビルドに"stuck":trueを付け、Jenkins を再起動しても消えません(手元の stuck の2件は、再起動の後も待ち行列に戻っていました)。 - 「‘agent1’ is offline」(agent1 はオフラインです。):そのラベルを持つ唯一のノードはあるのに、つながっていません。手元のは一度もつながったことのないエージェントでした。エージェントを起動するか、Nodes のそのノードのページで切れた理由を見ます。これも
"stuck":true。 - 「All nodes of label ‘windows’ are offline」(ラベル 'windows' のすべてのノードはオフラインです。):同じことで、ラベルの後ろに2台以上のノードがあり、どれもつながっていないときです(手元では
agent1とagent2、どちらも一度も起動していない物)。 - 「Build #1 is already in progress (ETA: N/A)」(ビルド #1 は既に実行中です。):ジョブが1度に1つしか動かない設定(フリースタイルなら Execute concurrent builds if necessary が外れている、Pipeline なら
disableConcurrentBuilds())で、前のビルドがまだ終わっていません。ETA が N/A なのは、見積もりのもとにする過去のビルドが無いときです。REST API では"blocked":true。#1 が終われば自分で始まります。 - 「Jenkins is about to shut down」(Jenkinsはシャットダウン中です。):誰かが Prepare for Shutdown(静止モード)を選んでいます。このとき待っているビルドは、ほかに何を待っていても全部これを言い、ダッシュボードには「Jenkins is going to shut down. No further builds will be performed. (cancel)」が出ます。
/api/jsonは"quietingDown":true。その帯の cancel で取り消すか、再起動を待ちます。 - 「Finished waiting」:ビルドの待機時間(quiet period・既定 5秒)が終わった直後、Jenkins がエグゼキューターを探す前に一瞬見えました。問題ではありません。
Jenkins は理由を、リクエストが求める言語(Accept-Language)で書き、無ければサーバー自身の言語で書きます。日本語の Windows で動かした手元の Jenkins は、そのヘッダーの無い curl に日本語で答えました。
IntelliJ IDEA など JetBrains IDE で Jenkins のビルドを見るなら
Pipeline Inbox for Jenkins は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。IDE から始めたビルドを最大1分、待ち行列の中まで追いかけ、始まったら一覧で選びます。1.0.12 からは、それまでに Jenkins が始めなかったとき、知らせに Jenkins の理由を添えます。たとえば「nightly:ビルドは Jenkins の待ち行列で待っています。Jenkins の理由:There are no nodes with the label ‘linux’」。理由は IDE の言語で Jenkins に聞きます。ビルドの一覧・Pipeline の段・失敗したテスト・コンソールのログは無料、ビルドの開始(パラメーターの有無を問わず)・再ビルド・中止・入力ステップは Pro(月 US$1.50・30日間の試用つき)です。
Jenkins® は LF Charities Inc. の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Jenkins プロジェクト・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Nothing is submitted」 · 待っている間エグゼキューターを握る input ステップ · 「401 Unauthorized」 · IntelliJ IDEA で使える Jenkins のプラグインの比較 · English