获取jenkins工作流中并行生成中失败生成的生成编号
我正在从我的作业中执行3个并行作业,每个作业运行测试,如下所示:获取jenkins工作流中并行生成中失败生成的生成编号,jenkins,groovy,jenkins-plugins,jenkins-workflow,Jenkins,Groovy,Jenkins Plugins,Jenkins Workflow,我正在从我的作业中执行3个并行作业,每个作业运行测试,如下所示: def run_job(job) { output = build(job:job, parameters:parameters) def buildNumber = output.getNumber().toString() test_results[job] = '/job/'+ job +'/' + buildNumber + '/artifact/test_result.xml' } def tes
def run_job(job) {
output = build(job:job, parameters:parameters)
def buildNumber = output.getNumber().toString()
test_results[job] = '/job/'+ job +'/' + buildNumber + '/artifact/test_result.xml'
}
def test_func_array = [:]
def test_results = [:]
test_func_array['Python_Tests'] = {run_job('Run_Python_Tests', test_results)}
test_func_array['JS_Tests'] = {run_job('Run_JS_Tests', test_results)}
test_func_array['Selenium_Tests'] = {run_job('Run_Selenium_Tests', test_results)}
parallel(test_func_array)
当每个作业成功时,我可以使用output.getNumber()
调用获取构建编号。但是,当作业失败时,build()
函数调用会引发异常,因此无法获取生成号
然而,失败的构建仍然可以有构建编号和归档工件。
如何获取失败生成的生成编号 使用
传播:false
。有关详细信息,请参阅代码段生成器。我认为当您想要完成所有并行作业时,Jesse的答案是有效的,即使其中一个作业失败。因此,基本上,它将禁用failFast功能
是否有人知道如何捕捉失败作业的编号,同时仍然具有failFast功能,以便在作业失败时短路构建?例如,下面是我的代码,我希望在catch块中也包含变量achild\u job\u info的值
build_jobs = [“Build_A”, “ Build_B”, “ Build_C”]
// in this hashmap we'll place the jobs that we wish to run
def branches = [:]
def achild_job_info = ""
def abuild_number = ""
for (x in build_jobs) {
def abuild = x
branches[abuild] = {
stage(abuild){
def allow_retry = true
retry(2) {
try {
achild_job_info = build job: abuild
echo “ achild_job_info” // —> this gives: org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper@232601dc
abuild_number = achild_job_info.getId()
build_job_to_number_mappings[abuild] = achild_job_info.getNumber()
} catch (err) {
echo “ achild_job_info: ${achild_job_info } “ // —> This comes empty. I want the runwrapper here as well, just like in the try block.
abuild_job_number = abuild_job_info.getId()
build_job_to_number_mappings[abuild] = achild_job_info.getNumber()
} // try-catch
} // stage
} // branches
} // for
branches.failFast = true
parallel branches
如果使用
propagate:false
,则不能使用try-catch块,因为生成作业
在作业失败时不会引发异常,因此需要通过getResult()
方法处理结果,如下所示:
stage('build something'){
def job_info = build job: build_something, propagate: false,
println "Build number: ${job_info.getNumber()}"
currentBuild.result = job_info.getResult()
}
另见: