Jenkins 管道 : How to write UTF-8 files with writeFile?

标签 jenkins groovy encoding utf-8 jenkins-pipeline

我希望这不是一个错误,我只是做错了什么。我有一个 Jenkins (v2.19.1) 流水线作业,在它的 groovy 脚本中,我需要在 Windows 节点上的现有文本文件中搜索和替换一些文本。

我已经使用了 fart.exe 和 powershell 来进行搜索和替换,但我真的很想只用 Jenkins 中的 groovy 来做到这一点,并消除对屁/powershell/等的依赖。并使此代码在 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 行中。

最佳答案

您的代码看起来正确。如果您只使用非重音字符和数字,请注意 ANSI 和 UTF-8 是相同的。尝试在您的文件中包含一些重音字母 (áéíóúç),以便编辑器可能会将其识别为 UTF-8 文件。

您必须使用 Jenkins 管道 writeFile function .这是一种特殊的 Jenkins 方法,用于在您的工作区中写入文件。默认的 Java File 对象将不起作用。

要指定编码,您必须使用命名参数。下面是一个例子:

writeFile(file: "filename.txt", text: "áéíóú", encoding: "UTF-8")

这将在您工作区的根目录创建一个名为 filename.txt 的文件,其中包含“áéíóú”作为内容并编码为 UTF-8。

顺便说一句,如果您可以完全控制必须搜索和替换的文件,请考虑使用 Groovy 的内置函数 SimpleTemplateEngine

关于 Jenkins 管道 : How to write UTF-8 files with writeFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42419119/

相关文章:

jenkins - 截至 2015 年初,持续集成与功能分支的最新技术水平如何?

java - Jenkins Maven项目本环境未提供编译器

php - 将 url 转换为唯一的 32 字符标记

json - BitTorrent KRPC 使用 BEncode 而不是 BSON 背后的原因是什么?

python - 防止 Python 中的编码错误

curl - Jenkins 远程触发器不工作

git - Jenkins Git 分支选择与回退

groovy - 灯泡:如何检查泰坦中两个顶点是否由边连接

java - 无法将组件 Autowiring 到实用程序类中

java - 获取 build.gradle 文件作为 .class 文件