4.jenkins实现job动态编排-主job通过入参控制子job的编排执行

前言

“jenkins实现job依赖编排”文中实现了不同层级job依次执行,但前提要将所有level型job都创建出来,每个level需要在脚本中写死构建哪些job,若只想执行某些job,这样是不是不太灵活??

pipeline代码


def load_job(job_name) {

    return {

        build job: job_name, parameters: [

        string(name: 'gitl_branch', value: env.gitl_branch)

        ]  

    }

}





def load_level_jobs(levelname,jobnames){

 jobnames.collectEntries {

        ["${levelname}:${it}": load_job(it)]

    }

}



pipeline{

    agent any

// parameters {

//	string(name: 'gitl_branch', defaultValue: 'xxxxxx', trim: true)

// {"level1":["composeJob_1_1","composeJob_1_2"],"level2":["composeJob_2_1"],"level3":["composeJob_3_1","composeJob_3_2"]}

//	string(name: 'compose_jobs', trim: true, description: 'map:{"level1":["job1","job2","job3"],"level2":["joba","jobb"]}')

//	}

    options{

        parallelsAlwaysFailFast()

    }

    stages{

        stage("config") {

            steps {

                script {

                    println("信息:"

                            + "\n jobsLevel:" + currentBuild.projectName

                            + "\n gitl_branch:" + env.gitl_branch

                            + "\n runJobs:" + env.compose_jobs

                    )

                    

     level_jobs = readJSON text : env.compose_jobs

     //level_jobs.each { 

     //	println(it)

     //}



                }

            }

        }

        stage("run jobs") {

            steps {

                script {

                 level_jobs.each { 

      stage(it.key){

       if(!(it == null || it.value == null || it.value.size() <= 0)){

        println("======level:[" + it.key + "], build jobs:" + it.value + "======")

        parallel load_level_jobs(it.key,it.value)

       }else{

        println("no jobs to run")

       }

      }

     }

                

     //level_jobs.each { 

     //	println(it.key + "====" + it.value)

     // 

     // // parallel firstBranch: {

     // // // do something

     // // }, secondBranch: {

     // // // do something else

     // // },

     // // failFast: true|false

     //	parallel load_level_jobs(it.key,it.value)

     //}

                }

            }

        }

    }

    

    post {

        failure {

            script {

                echo "${currentBuild.projectName}构建失败!!"

            }

        }

        success {

            script {

                echo "${currentBuild.projectName}构建成功!!"

            }

        }

    }



}

job配置

4.jenkins实现job动态编排-主job通过入参控制子job的编排执行_第1张图片

使用jenkins api从外部调起主job(执行效果)

python、java等都有对应api包,其实本质上都是调用jenkins rest api,所以也可以直接用postman直接请求rest接口

案例使用python jenkins api测试

4.jenkins实现job动态编排-主job通过入参控制子job的编排执行_第2张图片

你可能感兴趣的:(jenkins)