如何在Jenkins Pipeline中正确保存构建任务属性至文件?
解决Jenkins Pipeline构建任务属性保存到文件的问题
你遇到的问题是因为build步骤返回的是RunWrapper对象,直接把它转成字符串只会输出对象的内存引用信息,而不是实际的构建属性。要保存有用的构建信息,需要从RunWrapper对象中提取具体字段,再写入文件。
解决方案步骤
- 从RunWrapper对象中提取需要的属性(比如任务名、构建号、结果、构建URL等)
- 将这些属性组织成结构化的数据(比如Map)
- 转成可读性强的格式(比如JSON)写入文件
修改后的Pipeline代码
def jobsResult = [:] pipeline { agent { label 'Apps' } stages { stage('Exec Job') { steps { script { echo "Stage name is : ${STAGE_NAME}" try { // 执行job并提取关键属性 def job1Run = build job: "job_01", propagate: true, wait: true jobsResult.job_01 = [ jobName: job1Run.projectName, buildNumber: job1Run.number, result: job1Run.result, buildUrl: job1Run.absoluteUrl ] def job2Run = build job: "job_02", propagate: true, wait: true jobsResult.job_02 = [ jobName: job2Run.projectName, buildNumber: job2Run.number, result: job2Run.result, buildUrl: job2Run.absoluteUrl ] } catch (e) { echo "Slave job failed, marking build as UNSTABLE" currentBuild.result = 'UNSTABLE' } // 将Map转成格式化的JSON字符串写入文件 writeFile file: "jobsResults.txt", text: jobsResult.toPrettyString() } } } stage('Sleep') { steps { script { echo "Stage name is : ${STAGE_NAME}" try { sleep 10 } catch (Exception e) { echo "Sleep stage failed, but continuing..." } } } } } }
关键说明
RunWrapper对象提供了很多可访问的属性,比如projectName(任务名)、number(构建号)、result(构建结果)、absoluteUrl(构建URL),你可以根据需求添加或删减字段。- 使用
toPrettyString()方法可以把Map转成格式化的JSON字符串,比直接输出Map的toString()结果更清晰易读。 - 如果不需要JSON格式,也可以手动拼接字符串,比如:
def job1Info = "job_01: 构建号${job1Run.number}, 结果${job1Run.result}, URL${job1Run.absoluteUrl}\n" def job2Info = "job_02: 构建号${job2Run.number}, 结果${job2Run.result}, URL${job2Run.absoluteUrl}\n" writeFile file: "jobsResults.txt", text: job1Info + job2Info
内容的提问来源于stack exchange,提问作者Roman Zinger
相关产品推荐
相关产品推荐

