0

私はいくつかの段階でユーザーの確認が必要なCDパイプラインを持っているので、パイプラインがユーザーの入力を待っている間にサーバーリソースを解放したいと考えています。あなたはその上で見ることができますJenkins 2宣言型パイプライン - ノード内のすべてのステージ(エージェントany)を実行できますが、その中にはステージがなくても実行できるものがありますか?

pipeline { 
    agent any 
    stages { 
    stage ('Build Stage') { 
     steps { 
     ... 
     } 
    } 
    stage ('User validation stage') { 
     agent none 
     steps { 
     input message: 'Are you sure you want to deploy?' 
     } 
    } 
    stage ('Deploy Stage') { 
     steps { 
     ... 
     } 
    } 
    } 
} 

私はグローバルagent anyを持っていますが、ユーザーの検証段階で私がagent noneを追加しました。

これは私が望むことを誰かが確認できます(エージェント/ノードはユーザー入力を待っていません)?私はそれを検証する方法は見当たりませんが、実行ログには何も変わりません...

もしそうなら、どうすればいいですか?

+0

あなたはここに応答があります。https://stackoverflow.com/questions/42159221/use-a-lightweight-executor-for-a-declarative-pipeline-stage-agent-none –

+0

これはうまく見えますが、まだいくつかの質問があります同じラベルを使用すると、異なる段階で異なるノード(作業領域)を取得できますか?どうすればそれに対処できますか? – codependent

答えて

0

これは期待どおりに機能しません。パイプライン全体でagent anyを指定することはできず、次にagent noneがエグゼキュータを占有しないと考えます。これを証明するために

、メインジェンキンスのページに移動しビルドエグゼキュータ・ステータスを見て、あなたはそれを持っているとして、あなたはこのコードを実行することができ、そしてそれはinput段階で待っている間。あなたはまだあなたの仕事を実行しているエグゼクティブがいることがわかります。

次に、パイプラインをagent noneに切り替えて、入力ステップ以外のすべてのステップにagent anyを追加し、同じテストを行います。入力段階で待っている間、エグゼキュータの誰も占領されていないことが分かります。

異なるノード上の異なるワークスペースに関する質問として...あなたがSCMのコードを使用していると仮定すると、それは新しいノードごとにチェックアウトされるため、問題ではありません。心配する必要があるのは、各段階で作成した成果物だけです。

ジェンキンスは同じノードに留まることを「希望」するのは安全ではありません。しかし、それでも同じワークスペースディレクトリを取得する保証はありません。

これを処理する正しい方法は、後で行う必要のあるファイルをすべて作成または変更した可能性があります。stashです。次の段階では、必要なファイルunstashを入力します。ファイルが自分自身のノード宣言を持つ段階の間にファイルを作るとは決して仮定しないでください。

+0

情報ありがとうございます。ちょうど2,3の疑問:私は隠すときに一意の名前を使用する必要がありますか?たとえば、 "stashedArtifact" + buildNumberを連結します。戦争やjarファイルなどのアーティファクトを最大80MBまで隠すことに問題はありますか? – codependent

+0

あなたはそれをあなたの望む名前にし、それを使ってアンスタッシュすることができます。しかし、私は、複数の時間を隠すために同じ名前を使用することの反響が何であるか分かりません。それはclobberか結合するか?わからない。 サイズについての質問は、こちらのドキュメントで回答しています。https://jenkins.io/doc/pipeline/steps/workflow-basic-steps/#code-stash-code-stash-some-files-to-be-ビルド後使用済み –

関連する問題