I'm new to using pipelines.
I'm trying to execute the same commands against a number of nodes in 
parallel
Ideally I will pass a list of machines to run the same code against. Below 
I am 
hardcoding the machine names (machine1 and machine2) for the purposes of 
this example.

I found the following in Jenkins Pipeline examples:

----------------------------

def labels = ['precise', 'trusty'] // labels for Jenkins node types we will 
build ondef builders = [:]for (x in labels) {
    def label = x // Need to bind the label variable before the closure - can't 
do 'for (label in labels)'

    // Create a map to pass in to the 'parallel' step so we can fire all the 
builds at once
    builders[label] = {
      node(label) {
        // build steps that should happen on all nodes go here
      }
    }
}

parallel builders

----------------------------

So I adapted it to be the following:

----------------------------

pipeline {
    stages {
        stage('Stage1') {
            steps {
                def labels = ['machine1','machine2'] // labels for Jenkins node 
types we will build on
                def builders = [:]
                for (x in labels) {
                    def label = x // Need to bind the label variable before the 
closure - can't do 'for (label in labels)'

                    // Create a map to pass in to the 'parallel' step so we can 
fire all the builds at once
                    builders[label] = {
                        node(label) {
                            sh '''
                                echo "hostname:`hostname`"
                                echo "whoami:`whoami`"
                
                                '''
                        }
                    }
                }
                parallel builders
            }
        }
    }
}

----------------------------


But when I use it I get the following error:

Running in Durability level: MAX_SURVIVABILITY
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 5: Expected a step @ line 5, column 17.
                   def labels = ['machine1','machine2'] // labels for Jenkins 
node types we will build on
                   ^

WorkflowScript: 6: Expected a step @ line 6, column 17.
                   def builders = [:]
                   ^

WorkflowScript: 7: Expected a step @ line 7, column 17.
                   for (x in labels) {
                   ^

General error during semantic analysis: There's no @DataBoundConstructor on any 
constructor of class org.jenkinsci.plugins.workflow.cps.steps.ParallelStep

org.kohsuke.stapler.NoStaplerConstructorException: There's no 
@DataBoundConstructor on any constructor of class 
org.jenkinsci.plugins.workflow.cps.steps.ParallelStep



----------------------------


I can't figure a way around this.
So I was googling around and found this code that does work


pipeline {
    agent none
    stages {
        stage('stage1') {
            failFast true
            parallel {
                stage('S1') {
                    agent {
                        label "machine1"
                    }
                    steps {
                        sh '''
                            echo "hostname: `hostname`"
                            echo "whoami:`whoami`"
                
                        '''
                    }
                }
                stage('S2') {
                    agent {
                        label "machine2"
                    }
                    steps {
                        sh '''
                            echo "hostname: `hostname`"
                            echo "whoami:`whoami`"
                
                        '''
                    }
                }
            }

        }
    }
}


But it's not dynamic, I need to have a stage per machine. Does anyone have a 
suggestion

about how I can achieve what I have in my original code?

I want to dynamically decide what nodes to run the code on.

-- 
You received this message because you are subscribed to the Google Groups 
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/b2ae506c-023e-4604-896e-50b4eac6d817%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to