Hos*_*oss 9 groovy encoding utf-8 jenkins jenkins-pipeline
我希望这不是一个错误,我只是做错了.我有一个Jenkins(v2.19.1)管道作业,在它的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"
Run Code Online (Sandbox Code Playgroud)
我已经向多个文本编辑器确认,当我启动时test.txt文件是UTF-8,而writeFile行之后是ANSI.我已经尝试了包括/不包括编码属性和"utf-8"与"UTF-8"的所有组合.但在所有情况下,该文件都写为ANSI(由Notepad ++和VS Code报告).此外,添加问号(HEX 3F)作为文件的第一个字符.
回显线不显示额外的3F字符,所以看起来问题出现在writeFile行中.
您的代码看起来正确。如果仅使用非重音字符和数字,请参见ANSI和UTF-8相同。尝试在文件中添加带重音的字母(áéíóúç),以使编辑者可能会将其识别为UTF-8文件。
您必须使用Jenkins管道writeFile函数。这是一种特殊的Jenkins方法,用于在工作区中写入文件。默认的Java File对象不起作用。
要指定编码,必须使用命名参数。这是一个例子:
writeFile(file: "filename.txt", text: "áéíóú", encoding: "UTF-8")
Run Code Online (Sandbox Code Playgroud)
这将在工作区的根目录中创建一个名为filename.txt的文件,其内容为“áéíóú”,编码为UTF-8。
顺便说一句,如果您完全控制了必须搜索和替换的文件,请考虑使用Groovy的内置SimpleTemplateEngine
| 归档时间: |
|
| 查看次数: |
15994 次 |
| 最近记录: |