| When I try to generate tasks for parallel execution using the following code:
import jenkins.model.Jenkins
pipeline {
agent none
stages {
stage('Preparing machines') {
steps {
script {
def machines = ['agent-windows0', 'agent-windows1', 'agent-redhat0', 'agent-redhat1']
def machinePreparations = [:]
for (machine in machines) {
def labelParameters = []
labelParameters.add([$class: 'NodeParameterValue', name: 'node_name', labels: [machine], nodeEligibility: [$class: 'AllNodeEligibility']])
labelParameters.add([$class: 'StringParameterValue', name: 'ARBITRARY_PARAMETER', value: 'ARBITRARY_VALUE'])
machinePreparations[machine] = {
stage(machine + ' preparation') {
build job: '../Preparation/' + machine, parameters: labelParameters
def node = Jenkins.get().nodes.find({it.name == machine})
node.setLabelString(node.getLabelString() + 'successful')
println(String.format("Job with machine %s successfully done!", machine))
}
}
}
parallel machinePreparations
}
}
}
}
}
I have all the tasks receiving last value from collection ("agent-redhat1") - see screen attached. This can be partially fixed by saving "machine" variable into another intermediate variable and using this intermediate variable instead:
import jenkins.model.Jenkins
pipeline {
agent none
stages {
stage('Preparing machines') {
steps {
script {
def machines = ['agent-windows0', 'agent-windows1', 'agent-redhat0', 'agent-redhat1']
def machinePreparations = [:]
for (machine in machines) {
def agentName = machine
def labelParameters = []
labelParameters.add([$class: 'NodeParameterValue', name: 'node_name', labels: [agentName], nodeEligibility: [$class: 'AllNodeEligibility']])
labelParameters.add([$class: 'StringParameterValue', name: 'ARBITRARY_PARAMETER', value: 'ARBITRARY_VALUE'])
machinePreparations[agentName] = {
stage(agentName + ' preparation') {
build job: '../Preparation/' + agentName, parameters: labelParameters
def node = Jenkins.get().nodes.find({it.name == agentName})
node.setLabelString(node.getLabelString() + 'successful')
println(String.format("Job with machine %s successfully done!", agentName))
}
}
}
parallel machinePreparations
}
}
}
}
}
However, this also not fixing problem entirely, see JENKINS-55425 |