The following code worked for me after following the example from docs
<https://www.jenkins.io/doc/pipeline/examples/#parallel-from-list>:
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
> }
>
> 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
> }
> }
>
> }
> }
> }
>
>
> Its output:
>
> ...
> 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)
> ...
>
>
> As it invokes only one pipeline *#230* on *repo3*
>
>
> How to run the same Jenkins job on different repositories in parallel
> using Declarative Pipeline?
>
--
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/d094696f-9984-4e0e-9189-66c06aee8dado%40googlegroups.com.