簡體   English   中英

使用聲明性管道在不同的存儲庫上並行運行相同的 Jenkins 作業

[英]Run same Jenkins job on different repositories in parallel using Declarative Pipeline

我的目標是在多個存儲庫上並行運行相同的作業check-single-repo

下面的管道似乎沒有達到目標:

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                        
                }                
            }

        }
    }
} 

其 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)
...

因為它在repo3上僅調用一個管道#230

如何使用聲明性管道在不同的存儲庫上並行運行相同的 Jenkins 作業?

在遵循文檔中的示例后,以下代碼對我有用:

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        
                }                
            }

        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM