Jenkins:中止できない Pipeline のビルド
Pipeline のビルドを止める(赤い X、またはビルドの stop への POST)と、動いているステップに止まるよう頼みます。ふつうは数秒で終わります。ただ、例外を全部つかまえるスクリプトだと、止まらずに続くことがあります。2026年10月までは、そのときコンソールに Click here to forcibly terminate running steps と Click here to forcibly kill entire build の2つのリンクが出ていました。Pipeline: Job 1622 からは、Jenkins がこの2段を15秒おきに自分で行い、term と kill の住所は無くなりました。以下は、Pipeline のプラグインを入れた Jenkins 2.580.1 で、2026年10月30日に試した実物の答えです。
止めると起きること
bat 'ping -n 300 127.0.0.1' を動かしているビルドを、POST 1回で止めました(日本語の Jenkins):
Sending interrupt signal to process
testerによる中断
Stage "After" skipped due to earlier failure(s)
[Pipeline] { (Declarative: Post Actions)
post always ran
Finished: ABORTED
- POST から約6秒で終わりました。動いていたステップのプロセスに割り込みが送られ、後の段は飛ばされ、
post { always { … } }は動きました。英語の Jenkins では「testerによる中断」が「Aborted by tester」です。 - エグゼキューターを待っていたビルド(「利用可能な次のエグゼキューターを待っています」)は、段を1つも動かさず、すぐ ABORTED で終わりました。
- 止めるには、そのジョブの Job/Cancel の権限が要ります(Jenkins のソースの
checkAbortPermission)。
Jenkins が自分で強制終了する(2026年10月から)
例外を全部つかまえるスクリプトは、止めても動き続けます。ステップへの割り込みも例外だからです:
script {
for (int i = 0; i < 900; i++) {
try {
sleep time: 1, unit: 'SECONDS'
} catch (e) {
echo "caught: ${e}"
}
}
}
stop へ POST を1回送り、あとは何もしないと(英語の Jenkins):
0.6 秒 Aborted by tester 0.6 秒 caught: org.jenkinsci.plugins.workflow.steps.FlowInterruptedException: Aborted by tester 15.2 秒 Forcibly terminating running steps 15.2 秒 Terminating sleep 15.2 秒 caught: org.jenkinsci.plugins.workflow.steps.FlowInterruptedException: 30.4 秒 Forcibly killing entire build 30.4 秒 Finished: ABORTED
- これは workflow-job-plugin #804 で、2026年10月26日の Pipeline: Job 1622.vc41c189cb_e5f から入りました。中止の15秒後に Jenkins が動いているステップを終わらせ、さらに15秒後にビルドを強制終了します。リンクが出た瞬間に押したのと同じ扱いです。
- 強制終了では、それ以上ステップも Groovy の文も動きません。まだ動いていない
postやfinallyも動きません。 - 2つの待ち時間は、システムプロパティ
org.jenkinsci.plugins.workflow.job.WorkflowRun.termGracePeriodと…killGracePeriod(どちらも 15s)です。プルリクエストでは、非常時のためのサポート外の設定とされています。
/term と /kill のリンクはどこへ
Pipeline: Job 1622 より前は、中止してもビルドが終わらないと、15秒後にコンソールに「Click here to forcibly terminate running steps」、さらに15秒後に「Click here to forcibly kill entire build」が出ました。リンクはビルドの term と kill の住所へ POST を送り、ビルドのサイドパネルにも同じ物が出ました。1622 からは、どちらの住所もありません:
curl -X POST -u '<ユーザー>:<API トークン>' https://jenkins.example.com/job/<ジョブ>/<番号>/term HTTP 404 curl -X POST -u '<ユーザー>:<API トークン>' https://jenkins.example.com/job/<ジョブ>/<番号>/kill HTTP 404
…/term や …/kill を開くよう書いた答えは、前の版の話です。自分の版は Jenkins の管理 > プラグイン > インストール済みプラグイン > Pipeline: Job で見られます。1622 以降なら、1回止めて30秒ほど待ちます。
スクリプトがすぐ止まるようにする
割り込みは通します。FlowInterruptedException を先につかまえて、そのまま投げ直します。
try {
sleep time: 1, unit: 'SECONDS'
} catch (org.jenkinsci.plugins.workflow.steps.FlowInterruptedException e) {
throw e
} catch (e) {
echo "caught: ${e}"
}
Groovy のサンドボックスのまま、スクリプトの承認なしで動き、同じ中止でビルドは0.6秒で終わりました(Aborted by tester・Finished: ABORTED)。retry ステップは、本物の割り込みならやり直さずに終わるようになっています。
curl でビルドを止める
curl -X POST -u '<ユーザー>:<API トークン>' https://jenkins.example.com/job/<ジョブ>/<番号>/stop HTTP 200
- POST で送ります。GET は HTTP 405 でした。
- API トークンなら CSRF の crumb は求められませんでした。サインインなしの同じ POST は HTTP 403 「No valid crumb was included in the request」。
- Pipeline: Job 1622 以降、止めるための住所は
stopだけで、強制終了への段上げもここから始まります。
IntelliJ IDEA からビルドを止めるなら
Pipeline Inbox for Jenkins は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。選んだジョブのビルドを、段・失敗したテスト・コンソールのログと一緒に並べます。ビルドを止める(英語の画面では Stop Build)は、確かめてから赤い X と同じ stop への POST を送り、ビルドを読み直します。Pipeline: Job 1622 以降なら、応じないビルドは Jenkins が自分で終わらせます。前の版では、Jenkins のビルドのコンソールのリンクを使います。ビルドの一覧・段・コンソールのログは無料、ビルドの実行・停止・input への回答は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Jenkins® は LF Charities Inc. の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Jenkins プロジェクト・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:入力待ちのビルドを続行・中止する · 「利用可能な次のエグゼキューターを待っています」 · IntelliJ IDEA で使える Jenkins のプラグインの比較 · English