-
Type:
Bug
-
Resolution: Unresolved
-
Priority:
Minor
-
Component/s: groovy-plugin
-
Environment:Jenkins 2.150.1, Pipeline-Groovy Plugin 2.57
I want to execute same job with same parameters five times
But the following code leads to only one actual execution:
pipeline {
agent none
stages {
stage('Processing same project 5 times') {
steps {
script {
def projectsBuilds = [:]
for (int i = 0; i < 5; i++) {
int currentIteration = i
String uniqueRunName = String.format('Run #%d', currentIteration);
def labelParameters = []
labelParameters.add([$class: 'LabelParameterValue', name: 'node', label: 'linux'])
labelParameters.add([$class: "StringParameterValue", name: "PROJECT_NAME", value: 'Sample-Job'])
print(String.format("This parameters set hash is \"%s\"", labelParameters.hashCode()))
projectsBuilds[uniqueRunName] = {
stage(String.format('Sample-Job execution #%d', currentIteration)) {
build job: 'Sample-Job', parameters: labelParameters
}
}
}
parallel projectsBuilds;
}
}
}
}
}
As you see from execution log screen (screen0), though I explicitly instantiate "labelParameters" on each iteration, it has the same hash code in every iteration. Seems, Jenkins groovy plugin consider this situation as "one parameters container - one run"
Meanwhile if I just add one more parameter to container - current iteration index, groovy stops to "optimize" my code and now "labelParameters" has different hash code on every iteration. This leads to execution of "Sample-Job" 5 times, as intended (screen1)
pipeline {
agent none
stages {
stage('Processing same project 5 times') {
steps {
script {
def projectsBuilds = [:]
for (int i = 0; i < 5; i++) {
int currentIteration = i
String uniqueRunName = String.format('Run #%d', currentIteration);
def labelParameters = []
labelParameters.add([$class: 'LabelParameterValue', name: 'node', label: 'linux'])
labelParameters.add([$class: "StringParameterValue", name: "PROJECT_NAME", value: 'Sample-Job'])
labelParameters.add([$class: "StringParameterValue", name: "ITERATION_INDEX", value: currentIteration.toString()])
print(String.format("This parameters set hash is \"%s\"", labelParameters.hashCode()))
projectsBuilds[uniqueRunName] = {
stage(String.format('Sample-Job execution #%d', currentIteration)) {
build job: 'Sample-Job', parameters: labelParameters
}
}
}
parallel projectsBuilds;
}
}
}
}
}
- depends on
-
JENKINS-55426 Using "for in" loop for generating tasks for "parallel" execution, causes all tasks to have last value from iterated collection
-
- Open
-
- is blocked by
-
JENKINS-55600 Parallel execution of same job N times with different parameters leads to only 1 execution of the job
-
- Closed
-