我希望这不是一个bug,我只是做错了什么。我有一个Jenkins (v2.19.1) Pipeline作业,在它的groovy脚本中,我需要在Windows节点上搜索和替换现有文本文件中的一些文本。
我已经使用了fart.exe和powershell来做搜索和替换,但我真的很想用Jenkins中的groovy来做这件事,并消除对fart/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。我尝试了including/not的所有组合,包括编码属性和"UTF-8“与"utf-8”。但在所有情况下,文件都写出为ANSI (正如Notepad++和VS Code所报告的那样)。此外,将添加一个问号(十六进制3F)作为文件的第一个字符。
回应行未显示额外的3F字符,因此问题似乎出在writeFile行中。
发布于 2018-09-06 04:38:39
您的代码看起来是正确的。如果只使用非重音字符和数字,请注意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
https://stackoverflow.com/questions/42419119
复制相似问题