You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:00:27