ジェンキンス パイプラインの異なるステージに同じノードを割り当てる必要があります。シナリオは、分散 JMeter テストを実行する必要があり、次のようにパイプラインを作成することです。
- ステージ 1: ソース コードとテストのフェッチ、ソースのコンパイルと依存関係のインストール、デーモン プロセスとしての jmeter-server の実行、現在のノードの IP アドレスの取得など、いくつかのエージェントを並行してセットアップします。
- ステージ 2: ステージ 1 に同じノードを割り当て、1 つのノードを JMeter マスター ノードとして使用します。ステージ 1 のすべてのノードの IP アドレスのリストを JMeter.sh プロセスに渡し、分散テストを実行します。
node("master"){
def LIST_IP_ADDRESS_NODES=[]
stage("Setup-JMeter-Agent"){
parallel "node1":{
node("specifice-label"){
//fetch souces code and test.
//compile sources
//install dependencies
// start JMeter-server
//get IP Address
LIST_IP_ADDRESS_NODES.add(current_ip)
}
},
"node2":{
node("specifice-label"){
//fetch souces code and test.
//compile sources
//install dependencies
// start JMeter-server
//get IP Address
LIST_IP_ADDRESS_NODES.add(current_ip)
}
}
}
stage("Run-Jmeter-Test"){
parallel "node1":{
node("specific-label"){
//run jmeter.sh with the list of IP address of nodes in stage1.
}
},
"node2":{
node("specific-label"){
waitUntil {
// check if JMeter-master is finished.
}
}
}
}
}
問題は、ステージ2に割り当てられたノードがステージ1の同じノードであることを確認する方法です? 別の並行ジョブspecific-label
がステージ 1 で設定されたラベルを使用していくつかのノードを割り当てると、パイプラインは失敗します。その結果、ステージ 2 はいくつかのクリーンなノードを割り当て、テストの実行に失敗します。
specific-label
パイプラインに必要な 2 ノードよりも多くのラベルを持つノードがあり、パイプラインの障害がより頻繁に発生する場合、ステージ 1 とステージ 2 で異なるノードを割り当てる可能性が高くなる可能性があると思います。lock
そのため、ステージ1のノードをロックし、ステージ2で使用するためにノードを予約できるプログラミング言語のようなメカニズムがあるのではないかと思います。
ありがとう。