任务背景:想要实现如此流程:开发提交代码后触发CI,开发的CIjob会触发自动化测试环境升级job并传入参数,当前有两套自动化测试环境(all-in-one和splite),想要实现两套自动化环境升级完毕后跑对应的自动化脚本,当两套环境的自动化脚本都跑过时进行手工测试环境升级操作。
实现方案:
流程图
介绍下每个job的功能:
- 首先需要一个pipline流水线总体调控,接受并传递CIjob中的参数,该job取名enter job,
- jobA和jobB是两套不同的自动化测试环境升级job
- jobC和jobD是两套自动化测试环境的测试脚本执行job
- jobE是手工测试环境升级job
jobA实现方式
这里是定义上游job传入并传入下游的使用参数
image.png
下面是pipline的脚本,stages中使用了parallel,parallel中的stage可以并行执行,jobE的执行放在post的success中是为了只有在jobA和jobB以及后续job都执行成功后才执行最终的jobE,若有一个不成功就不执行jobE
pipeline {
agent any
environment {
CC = 'clang'
}
stages {
stage('并行执行orch_update_deploysmoke和orch_update_splitsmoke'){
parallel {
stage('run orch_update_deploysmoke') {
steps {
script {
println "Here we kickoff run B1_orch_update_deploysmoke"
println "${params.RF_version}"
jobB = build job: 'B1_orch_update_deploysmoke', parameters: [
// [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
[$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
[$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
[$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
[$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
[$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
[$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
[$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
[$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
]
println jobB.getResult()
}
}
}
stage('run orch_update_splitsmoke') {
steps {
script {
println "Here we kickoff run B2_orch_update_splitsmoke"
jobB = build job: 'B2_orch_update_splitsmoke', parameters: [
// [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
[$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
[$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
[$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
[$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
[$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
[$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
[$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
[$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
]
println jobB.getResult()
}
}
}
}
}
}
post{
success('run D_orch_update_test') {
script {
jobF = build job: 'D_orch_update_test', parameters: [
// [$class: 'BooleanParameterValue', name: 'runsmoketest',value: "${params.runsmoketest}"],
[$class: 'StringParameterValue', name: 'Run_Smoke',value: "${params.Run_Smoke}"],
[$class: 'StringParameterValue', name: 'RF_version',value: "${params.RF_version}"],
[$class: 'StringParameterValue', name: 'EntireMessage',value: "${params.EntireMessage}"],
[$class: 'StringParameterValue', name: 'frontend_Author',value: "${params.frontend_Author}"],
[$class: 'StringParameterValue', name: 'frontend_releaseInfo',value: "${params.frontend_releaseInfo}"],
[$class: 'StringParameterValue', name: 'Backend_Author',value: "${params.Backend_Author}"],
[$class: 'StringParameterValue', name: 'backend_releaseinfo',value: "${params.backend_releaseinfo}"],
[$class: 'StringParameterValue', name: 'Issues',value: "${params.Issues}"]
]
println jobF.getResult()
}
}
}
}
jobA/jobB实现方式
在jobA/jobB中也先定义上游传入和用到的参数
image.png
在构建步骤中先执行升级操作
image.png
在这一步选择有条件的执行,只有当上游传入的Run_Smoke参数为yes时执行下面的测试jobC/jobD
image.png
这里是关键,需要勾选上Block until the triggered projects finish their builds,这样就可以在jobC/D测试没通过报错时能够让触发他们的jobA/B也报错,从而enter_job就不执行JobE
image.png
jobC/jobD实现方式
在jobC/jobD中也先定义上游传入和用到的参数和上面一样,构建中放入执行测试任务的命令
image.png
JobE实现方式
同上,jobE只需要配置升级手工测试环境的命令即可
实现效果
成功时,这里run orch_update_deploysmoke是执行jobA和jobC的总时间
image.png
这里JobD测试失败,部署手工测试环境的jobE就不执行了
image.png