-
-
Save jespada/bd622e07c9550a9e9b50519fe320b054 to your computer and use it in GitHub Desktop.
Run a command once on each Jenkins slave using the CloudBees Workflow / Jenkins Pipeline plugin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// The ArrayList of slaves is not serializable, so fetching them should be marked as @NonCPS so that | |
// no attempt is made to serialize and save the local state of the function. See here for details: | |
// https://github.com/jenkinsci/pipeline-plugin/blob/master/TUTORIAL.md#serializing-local-variables | |
@NonCPS | |
def getSlaves() { | |
def slaves = [] | |
hudson.model.Hudson.instance.slaves.each { | |
slaves << it.name | |
} | |
return slaves | |
} | |
// Run a command on each slave in series | |
getSlaves().each { | |
node(it) { | |
sh "hostname" | |
} | |
} | |
// Run a command on each slave in parallel | |
def jobs = [:] | |
getSlaves().each { | |
// Use a local variable to avoid closing over a reference to 'it', | |
// the value of which changes on each iteration | |
def slave = it | |
// Create a closure for each slave and put it in the map of jobs | |
jobs[slave] = { | |
node(slave) { | |
sh "hostname" | |
} | |
} | |
} | |
// Run the closures in parallel | |
parallel jobs |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
comment from user
stolenegg
: "I've found (at least with Jenkins 2, Workflow plugin 2.4, Groovy sandboxed) this second each iteration doesn't work. Using a for loop, however, does. e.g."