Jenkins管道:如何使用WriteFile编写UTF-8文件



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

我已经使用了fart.exe和powershell进行搜索和替换,但是我真的很想用詹金斯的凹槽来做到这一点,并消除了对屁/powershell/等的依赖。并使该代码在Linux和Windows节点上都可以重复使用。

经过大量谷歌搜索并尝试了各种方法,我获得的最接近的就是使用ReadFile和WitlingFile。但是,我无法获得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,而在写file行之后的ANSI。我尝试了包括/不包括编码属性和" UTF-8" vs" utf-8"的所有组合。但是在所有情况下,该文件都是作为ANSI写出的(由记事本 和VS代码报告)。另外,添加了一个问号(HEX 3F)作为文件的第一个字符。

回声线没有显示额外的3F字符,因此问题似乎在写入file行中。

您的代码看起来正确。看到ANSI和UTF-8仅使用非重音字符和数字,则相同。尝试在您的文件中使用一些重音字母(Áéíóúç),以使编辑者可能将其识别为UTF-8文件。

您必须使用jenkins管道写文件函数。这是一种特殊的Jenkins方法,可以在工作区内编写文件。默认的Java文件对象无法正常工作。

要指定编码,您必须使用指定的参数。这是一个例子:

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

这将在您的工作区的根部创建,一个名为 filename.txt 的文件,其内容为内容,并编码为UTF-8。

btw,如果您对文件完全控制了您必须搜索和替换,请考虑使用Groovy的内置simpereTemplateEngine

最新更新