Pipline的介绍使用见官网:https://wiki.jenkins-ci.org/display/JENKINS/Pipeline+as+Code
示例1:
需求说明:test1,作为main job调用test2,test3,两个job,并行编译,在test1中传入Branch参数,并使得test2,test3使用同样的branch,而test2,test3 fail不会使得test1 fail,test会等待test2,test3构建完成之后才停止。如果在build test1之前 勾选了smoketest选项那么构建smoke-test job,不必等待该job的结果。smoketest为并行编译总体完成之后才编译。test2,test3同样要有Branch parameter.main函数可以作为一个环境变量设置函数。
这个pipline是在test1上面的。
/** define main
*
*/
def main() {
return {
node('master') {
try {
echo 'hello world'
} catch (err) {
echo "main job error: Marking job as failed"
}
}
}
}
/** define test2
*
*/
def test2() {
return {
try {
build job: "test2",
parameters: [
[$class: 'StringParameterValue', name: "Branch", value: "$Branch"],
]
} catch (err) {
echo "test2 error: Ignoring status"
}
}
}
/** define test3
*
*/
def test3() {
return {
try {
build job: "test3",
parameters: [
[$class: 'StringParameterValue', name: "Branch", value: "$Branch"],
]
} catch (err) {
echo "test3 error: Ignoring status"
}
}
}
/*
* define parallel task,60 minutes is a limit time
*/
def stepsForParallel = [:]
stepsForParallel['main'] = main()
stepsForParallel['test2'] = test2()
stepsForParallel['test3'] = test3()
stage('TOTAL') {
try {
timeout(time:60, unit:'MINUTES') {
stepsForParallel.failFast = true
parallel stepsForParallel
}
}catch (err) {
throw err
}
}
/**
* Tests job: DON'T WAIT !
*/
if (smoketest == "true") {
build job: "smoke-test",
wait: false
}
OutPut:
Started by user louis
[Pipeline] stage
[Pipeline] { (TOTAL)
[Pipeline] timeout
Timeout set to expire in 1 hr 0 min
[Pipeline] {
[Pipeline] parallel
[Pipeline] [main] { (Branch: main)
[Pipeline] [test2] { (Branch: test2)
[Pipeline] [test3] { (Branch: test3)
[Pipeline] [main] node
[main] Running on master in /var/lib/jenkins/workspace/test1
[Pipeline] [test2] build (Building test2)
[test2] Scheduling project: test2
[Pipeline] [test3] build (Building test3)
[test3] Scheduling project: test3
[Pipeline] [main] {
[Pipeline] [main] echo
[main] hello world
[Pipeline] [main] }
[Pipeline] [main] // node
[Pipeline] [main] }
[test2] Starting building: test2 #12
[test3] Starting building: test3 #7
[Pipeline] [test3] }
[Pipeline] [test2] }
[Pipeline] // parallel
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] build (Building smoke-test)
Scheduling project: smoke-test
[Pipeline] End of Pipeline
Finished: SUCCESS
本文介绍了一个 Jenkins Pipeline 的示例配置,展示了如何通过定义 main 函数作为环境变量设置的基础,实现 test1 作为 mainjob 调用 test2 和 test3 两个 job 并行编译。同时介绍了如何传递 Branch 参数并在不同 job 间共享,以及如何处理失败情况和构建 smoke-test job 的逻辑。
7914

被折叠的 条评论
为什么被折叠?



