既存のビルドパイプラインをjenkins宣言型パイプライン(マルチブランチパイプライン)として再構築し、ビルド伝播を処理する際に問題があります。ヘビー級エグゼキュータをブロックせずに宣言パイプラインでユーザー入力を待つ方法
すべての関連ファイルをパッケージ化して隠した後、パイプラインはユーザーの入力がトリガーされるのを待つことになっています。
入力ステップを追加するだけで、現在のビルドノードがブロックされます。このエグゼクターはかなり重いので、私はこのステップをより軽量のマシンに移したいと思っています。
最初はスクリプトパイプラインとして仕事をして、ちょうど2つの異なるnode('label')
ブロックを作成しました。宣言的な構文と似たようなことをする方法はありますか?
node('spine') {
stage('builder') {
sh 'mvn clean compile'
stash name: 'artifact', includes: 'target/*.war'
}
}
node('lightweight') {
stage('wait') {
timeout(time:5, unit:'DAYS') {
input message:'Approve deployment?'
}
}
// add deployment stages
}
私はすでに、物事のカップルを試してみました:
がトップレベルでのエージェントの設定および伝播ステップにさらなる薬剤の設定を追加することが、その後、私はトップレベルとブロック2つのエグゼキュータを持っています定義済みの構築ノードは停止しません。
トップレベルにagent none
を設定し、ステップごとにエージェントを設定してください。 git checkoutは最初のノードに存在しません。私はあなたのアドバイス、次の私のパイプラインを再構成
EDIT 1
は、それが現在のようになります。
pipeline {
agent none
tools {
maven 'M3'
}
stages {
stage('Build') {
agent { label 'spine' }
steps {
checkout scm // needed, otherwise the workspace on the first step is empty
sh "mvn clean compile"
}
}
stage('Test') {
agent { label 'spine' }
steps {
sh "mvn verify" // fails because the workspace is empty aggain
junit '**/target/surefire-reports/TEST-*.xml'
}
}
}
}
彼らは実行をいけないと、ワークスペースがステップ間で引き継がれていないため、このビルドが失敗します同じエグゼキュータ上で
EDIT 2は明らかに時には同じエグゼキュータ上で実行し、手順にはありません。
エージェント定義のラベルが現在のエグゼキュータで実行されることを期待していました。変化する。
これは宣言型パイプラインでは機能しません。ノードブロックはありません。 – Laures
合意。答えを更新しました。 – Bert
私は同じことをやってみたが、問題にぶつかった。明らかに、同じエージェント上で実行されていても、ワークスペースは1つのステージから他のステージに引き継がれません。私の2番目のビルドステップ(Mavenビルド)は空のワークスペースを見つけます – Laures