Jenkins Pipeline の input ステップ:続行か中止か
Pipeline の input ステップは、ビルドを止めて、誰かが Proceed(ステップの ok の文字)か Abort を選ぶまで待ちます。timeout で囲まない限り、期限はありません。答えるのはビルドの画面からでも、ビルドの input/<id>/ の住所への POST 1回でもできます。以下は、Pipeline のプラグインを入れた Jenkins 2.580.1 で、2026年10月30日に試した実物の答えです。
答えられる人
Pipeline: Input Step プラグインのソースより:
submitterが無いとき:そのジョブのビルドの権限(Job/Build)を持つ人なら誰でも続行できます。submitterがあるとき:そこにカンマ区切りで書いたユーザーかグループだけが続行できます。名前の前後の空白は無視され、大文字と小文字の区別はセキュリティレルムの決めに従います(既定は区別しない)。管理者(Overall/Administer)はいつでも続行できます。- 中止:submitter に書いた人か、Job/Cancel の権限を持つ人。
- それ以外の人には「You need to be <submitter> to submit this.」「You need to have Job/Build permissions to submit this.」「You need to be '<submitter>' (or have Job/Cancel permissions) to cancel this.」が返ります。
コンソールには答えた人が「Approved by <ユーザー>」か「Rejected by <ユーザー>」で出ます。その名前をスクリプトの後で使うなら submitterParameter を付けます。ステップが値と一緒にその名前を返します。試したときは、submitter: 'alice,release-managers' に入っていない管理者のユーザーでも続行できました。
ビルドの画面で答える
- コンソール出力:待っている間、メッセージと「<ok> or Abort」のリンクが出ます。
- ビルドの input のページ:
/job/<ジョブ>/<番号>/input/に、待っている input が全部、パラメーターと2つのボタンつきで並びます。 - Pipeline: Stage View は、待っている段のマスにボタンがあります。新しい Jenkins が代わりに入れる Pipeline Graph View(Blue Ocean は非推奨に)は、同じ input を Stages の画面のために読んでいます(その JSON は下に)。
input の ID を知る
答えはどれも /job/<ジョブ>/<番号>/input/<id>/ へ送ります。ID は Jenkins がこう決めます:
- ステップに
id: 'approve-prod'と書くと、ID はApprove-prodでした。Jenkins が先頭の1文字を大文字にします。input/approve-prod/proceedEmptyへの POST は HTTP 404、input/Approve-prod/proceedEmptyは通りました。 idが無いと、ID はメッセージの MD5 ハッシュ(16進)です。input message: 'Deploy to staging?'は57a6872f1f7f99e3c351c978fa540038で待っていました。メッセージを変えると住所も変わるので、スクリプトから答えるステップにはidを付けます。
走っているビルドから読むなら、Stage View の REST API が待っている input を並べます:
curl -u '<ユーザー>:<API トークン>' 'https://jenkins.example.com/job/<ジョブ>/<番号>/wfapi/pendingInputActions'
[{"id":"Release","proceedText":"Release","message":"Release 1.4.0?",
"inputs":[{"type":"ChoiceParameterDefinition","name":"TARGET",
"definition":{"defaultVal":"staging","choices":["staging","production"]}}],
"proceedUrl":"/job/<ジョブ>/<番号>/wfapi/inputSubmit?inputId=Release",
"abortUrl":"/job/<ジョブ>/<番号>/input/Release/abort",
"redirectApprovalUrl":"/job/<ジョブ>/<番号>/input/"}]
wfapiは Stage View(Pipeline REST API プラグイン)と一緒に入ります。Pipeline Graph View だけの Jenkins では HTTP 404 でした。Graph View 自身の JSON、/job/<ジョブ>/<番号>/stages/allStepsには、待っているステップが"state":"paused"と"inputStep":{"message":"Release 1.4.0?","cancel":"Abort","id":"Release","ok":"Release","parameters":true}で載ります。Graph View の画面のための物で、API としての文書はありません。/job/<ジョブ>/<番号>/input/api/jsonは HTTP 404 でした。ビルドの JSON API は input ステップを載せません。
curl で続行・中止する
curl -X POST -u '<ユーザー>:<API トークン>' \ 'https://jenkins.example.com/job/<ジョブ>/<番号>/input/<id>/proceedEmpty' HTTP 200 (コンソール「Approved by <ユーザー>」・ビルドはそのまま SUCCESS まで) curl -X POST -u '<ユーザー>:<API トークン>' \ 'https://jenkins.example.com/job/<ジョブ>/<番号>/input/<id>/abort' HTTP 200 (コンソール「Rejected by <ユーザー>」・後の段は「skipped due to earlier failure(s)」・Finished: ABORTED)
- POST で送ります。
proceedEmptyへの GET は HTTP 405 でした。 - API トークンなら CSRF の crumb は求められませんでした。サインインなしの同じ POST は HTTP 403 「No valid crumb was included in the request」。
- 答えた後の同じ POST は HTTP 404 です。住所がもう無くなっています。
パラメーター付きの input は proceedEmpty でなく submit で
パラメーターを聞く input に proceedEmpty を送っても HTTP 200 が返りましたが、その後ビルドは失敗しました。ステップが値を返さず、値を読むスクリプトの次の行で止まりました:
groovy.lang.MissingPropertyException: No such field found: field java.lang.String TARGET Finished: FAILURE
値は submit へ、項目 proceed と一緒に送ります(画面は ok の文字を送ります):
curl -X POST -u '<ユーザー>:<API トークン>' \
'https://jenkins.example.com/job/<ジョブ>/<番号>/input/Release/submit' \
--data-urlencode 'json={"parameter":[{"name":"TARGET","value":"production"}]}' \
--data-urlencode 'proceed=Release'
HTTP 200 (スクリプトは TARGET=production と、承認した人のユーザー ID を受け取った)
proceed が無いと、プラグインのソースでは submit は中止として扱われます。
Jenkins CLI には命令が無い
Pipeline のプラグイン(workflow-aggregator)を入れた Jenkins 2.580.1 の CLI は68の命令があり、input ステップに答える物はありませんでした。Pipeline の物は replay-pipeline・restart-from-stage・declarative-linter で、stop-builds はビルドごと止めます。上の HTTP を使います。
無期限に待ち、エグゼキューターを握ったままになることがある
- timeout が無いと、input は誰かが答えるかビルドが止められるまで待ちます。timeout で囲むと、時間切れは中止になります:
stage('Approve') { options { timeout(time: 1, unit: 'DAYS') } steps { input message: 'Deploy to production?', ok: 'Deploy' } }10秒の timeout では、コンソールに「Cancelling nested steps due to timeout」「Timeout has been exceeded」が出て、ビルドは ABORTED で終わりました。 - Pipeline の先頭が
agent anyだと、待っている間ずっと2つのエグゼキューターの1つが使用中でした。先頭をagent noneにして、何かを動かす段にだけ agent を付けると、待っている間に使用中のエグゼキューターは0でした。そのエグゼキューターを待つ他のビルドには「Waiting for next available executor」が出ます。
IntelliJ IDEA から input に答えるなら
Pipeline Inbox for Jenkins は、Lesstep が作っている JetBrains IDE(2024.1 以降)のプラグインです。input を待っているビルドは、詳細に input のメッセージが出ます。続行のボタン(ステップの ok の文字)と中止のボタンが proceedEmpty と abort で答えます。パラメーターを聞く input には中止だけを出し、続行は input のページに任せるので、値が飛ばされません。自分のビルドか、いまのブランチのビルドが input に着くと、IDE が input のメッセージつきの通知で1回知らせ、開くとそのビルドが続行と中止のボタンつきで出ます。待っている input は Stage View から、無ければ Pipeline Graph View から読みます。ビルドの一覧・段・コンソールのログは無料、input への回答・ビルド・中止は Pro(月 US$1.50・30日間の無料試用つき)です。画面は日本語です。
Jenkins® は LF Charities Inc. の登録商標、IntelliJ IDEA は JetBrains s.r.o. の商標です。このページは Jenkins プロジェクト・JetBrains のいずれとも提携しておらず、承認も受けていません。
ほかに:「Nothing is submitted」(パラメーター付きのジョブの起動) · IntelliJ IDEA で使える Jenkins のプラグインの比較 · English