pipeline {
agent any
options {
ansiColor('xterm')
}
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3
}
stages {
stage('Prepare repos to run on') {
steps {
script {
repo_names = params.REPO_NAMES.split(',')
def single_repo_jobs = [:]
for (repo_name in repo_names) {
println repo_name
single_repo_jobs[repo_name] = {
stage(repo_name) {
catchError {
build job: 'check-single-repo',
parameters:
[
string(name:'REPO_NAME', value: repo_name)
] }
}
}
}
println single_repo_jobs
parallel single_repo_jobs
}
}
}
}
}
...
repo1
repo2
repo3
{repo1=org.jenkinsci.plugins.workflow.cps.CpsClosure2@3a396959, repo2=org.jenkinsci.plugins.workflow.cps.CpsClosure2@1a4b5000, repo3=org.jenkinsci.plugins.workflow.cps.CpsClosure2@1d034ac}
[Pipeline] parallel
[Pipeline] { (Branch: repo1)
[Pipeline] { (Branch: repo2)
[Pipeline] { (Branch: repo3)
[Pipeline] stage
[Pipeline] { (repo3)
[Pipeline] stage
[Pipeline] { (repo3)
[Pipeline] stage
[Pipeline] { (repo3)
[Pipeline] catchError
[Pipeline] {
[Pipeline] catchError
[Pipeline] {
[Pipeline] catchError
[Pipeline] {
[Pipeline] build (Building check-single-repo)
Scheduling project: check-single-repo
[Pipeline] build (Building check-single-repo)
Scheduling project: check-single-repo
[Pipeline] build (Building check-single-repo)
Scheduling project: check-single-repo
Starting building: check-single-repo #230
Starting building: check-single-repo #230
Starting building: check-single-repo #230
[Pipeline] }
check-single-repo #230 repo3 completed with status UNSTABLE (propagate: false to ignore)
[Pipeline] }
check-single-repo #230 repo3 completed with status UNSTABLE (propagate: false to ignore)
[Pipeline] }
check-single-repo #230 repo3 completed with status UNSTABLE (propagate: false to ignore)
...
pipeline {
agent any
options {
ansiColor('xterm')
}
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3
}
stages {
stage('Prepare repos to run on') {
steps {
script {
def repo_names = params.REPO_NAMES.split(',')
def single_repo_jobs = repo_names.collectEntries {
["${it}" :
{
catchError {
stage(it) {
build job: 'check-single-repo',
parameters:
[
string(name:'REPO_NAME', value: "${it}")
]
}
}
}
]
}
parallel single_repo_jobs
}
}
}
}
}
On Jun 11, 2020, at 10:00, Roman O <warri...@gmail.com> wrote:
pipeline {
agent any
options {
ansiColor('xterm')
}
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false,saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3
}
stages {
stage('Prepare repos to run on') {
steps {
script {
def repo_names = params.REPO_NAMES.split(',')
def single_repo_jobs = repo_names.collectEntries {
["${it}" :
{
catchError {
stage(it) {
build job: 'check-single-repo',
parameters:
[
string(name:'REPO_NAME', value: "${it}")
]
}
}
}
]
}
parallel single_repo_jobs
}
}
}
}
}
On Thursday, June 11, 2020 at 4:49:15 PM UTC+3, Roman O wrote:
My goal is to run the same job check-single-repo on multiple repositories in parallel.Below pipeline doesn't seem to achieve the goal:
pipeline {
agent any
options {
ansiColor('xterm')
}
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false,saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3
--
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 jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/jenkinsci-users/d094696f-9984-4e0e-9189-66c06aee8dado%40googlegroups.com.
pipeline {
agent any
options {
ansiColor('xterm')
}
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3
}
stages {
stage('Prepare repos to run on') {
steps {
script {
repo_names = params.REPO_NAMES.split(',')
def single_repo_jobs = [:]
for (repo_name in repo_names) {
def theRepoName = "$repo_name" // This assignment is important
println theRepoName
single_repo_jobs[ theRepoName ] = {
stage( theRepoName ) {
catchError {
build job: 'check-single-repo',
parameters:
[
string(name:'REPO_NAME', value: theRepoName )
] }
}
}
}
println single_repo_jobs
parallel single_repo_jobs
}
}
}
}
}
The following code worked for me after following the example from docs:
pipeline { agent any options { ansiColor('xterm') } parameters { extendedChoice description: '', multiSelectDelimiter: ',', name: 'REPO_NAMES', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'repo1,repo2,repo3', visibleItemCount: 3 } stages { stage('Prepare repos to run on') { steps { script { def repo_names = params.REPO_NAMES.split(',') def single_repo_jobs = repo_names.collectEntries { ["${it}" : { catchError { stage(it) { build job: 'check-single-repo', parameters: [ string(name:'REPO_NAME', value: "${it}") ] } } } ] } parallel single_repo_jobs } }