前言
“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配置
使用jenkins api从外部调起主job(执行效果)
python、java等都有对应api包,其实本质上都是调用jenkins rest api,所以也可以直接用postman直接请求rest接口
案例使用python jenkins api测试