【发布时间】:2017-02-23 14:53:36
【问题描述】:
我希望这不是错误,我只是做错了什么。我有一个 Jenkins (v2.19.1) 流水线作业,在它的 groovy 脚本中,我需要在 Windows 节点上搜索和替换现有文本文件中的一些文本。
我已经使用 fart.exe 和 powershell 来进行搜索和替换,但我真的很想只使用 Jenkins 中的 groovy 来执行此操作,并消除对 fart/powershell/etc 的依赖。并使这段代码在 linux 和 windows 节点上都更可重用。
经过大量谷歌搜索并尝试了各种方法,我得到的最接近的是使用 readFile 和 writeFile。但是,我无法让 writeFile 创建一个 UTF-8 文件。即使我指定 UTF-8(假设我做得正确),它也会创建一个 ANSI 文件。
这是我目前所拥有的......
def fileContents = readFile file: "test.txt", encoding: "UTF-8"
fileContents = fileContents.replace("hello", "world")
echo fileContents
writeFile file: "test.txt", text: fileContents, encoding: "UTF-8"
我已经通过多个文本编辑器确认 test.txt 文件在我开始时是 UTF-8,而在 writeFile 行之后是 ANSI。我已经尝试了包含/不包含编码属性和“utf-8”与“UTF-8”的所有组合。但在所有情况下,文件都以 ANSI 形式写出(由 Notepad++ 和 VS Code 报告)。此外,还添加了一个问号 (HEX 3F) 作为文件的第一个字符。
echo 行没有显示额外的 3F 字符,因此问题似乎出在 writeFile 行。
【问题讨论】:
-
你能在 unix 节点上测试吗?我刚刚在我的 Jenkins 上测试了您的代码,并且在针对 unix 节点运行代码时没有编码问题......我猜测 Windows 节点存在某种问题,无论是在操作系统端还是在使用 Windows 时的插件端..
-
@Pom12,我现在不能。只有我拥有的 unix 节点是主节点,但它在我无权访问的 Docker 容器中运行。在某个时候,我们将有可用的 unix 节点,如果我还没有弄清楚,可以尝试一下。
标签: jenkins groovy encoding utf-8 jenkins-pipeline