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

Jenkins Pipeline中如何向文件追加内容(不使用echo命令)

原因说明

Jenkins 内置 writeFile 步骤默认是覆盖写入模式,每次执行都会清空目标文件的原有内容再写入新文本,本身没有提供追加写入的开关,因此连续调用时只会保留最后一次写入的内容。

无shell依赖的追加写入实现

以下两种方案都不需要调用shell的echo类命令,可根据环境选择:

方案1:原生步骤实现(无额外插件依赖,兼容性最好)

核心逻辑:写入新内容前先读取文件现有内容,将原有内容、换行符、新内容拼接完成后,再整体写回文件。
修正后的可运行Pipeline示例:

node("jenkins-builder") {
    stage("test") {
        // 修复原代码的语法问题:Groovy双引号字符串内部的双引号需要转义
        String s = "JIRA-1234 | Use \"&#x27\" in place of apostrophes in patient's names when exporting to CSV."
        dir(env.WORKSPACE) {
            // 首次写入:文件不存在时直接创建写入
            writeFile(file: "./out.txt", text: "First line\n")
            
            // 追加逻辑:判断文件存在则读原有内容,不存在则初始化为空串,拼接新内容后写回
            def existingContent = fileExists('./out.txt') ? readFile(file: './out.txt') : ""
            writeFile(file: "./out.txt", text: existingContent + s + "\n")
            
            def finalContent = readFile(file: "./out.txt")
            println finalContent
        }
    }
}

注意:拼接内容时需要手动补充换行符\n,否则多次写入的内容会粘连在同一行。

方案2:使用Pipeline Utility Steps插件的原生追加能力

如果你的Jenkins环境已经安装了Pipeline Utility Steps插件,该插件扩展的writeFile步骤原生支持append参数,不需要手动读写拼接:

node("jenkins-builder") {
    stage("test") {
        String s = "JIRA-1234 | Use \"&#x27\" in place of apostrophes in patient's names when exporting to CSV."
        dir(env.WORKSPACE) {
            writeFile(file: "./out.txt", text: "First line\n")
            // 追加写入时指定append: true即可
            writeFile(file: "./out.txt", text: s + "\n", append: true)
            
            def finalContent = readFile(file: "./out.txt")
            println finalContent
        }
    }
}
  • 两种方案执行后,目标文件都会完整保留所有写入的内容,不会出现覆盖问题。
  • 额外提示:你原始代码中定义字符串s时,内部直接嵌套了未转义的双引号,会触发Groovy语法报错,需要在内部双引号前加反斜杠转义,或者使用三引号定义字符串避免转义问题。

内容的提问来源于stack exchange,提问作者Chris F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:39:14