我需要使用Groovy从jenkins从属服务器上的大型json文件中写入一个csv文件。以前,我首先使用的方法仅在“主”上运行,请参见下文:
def file = new FilePath(channel, envVars['WORKSPACE'] + separator + 'FDCUtilities' + separator + 'GroovyTest' + separator + 'json.json')
def outPutCSV = envVars['WORKSPACE'] + separator + 'FDCUtilities' + separator + 'GroovyTest' + separator + 'test.csv'
def results = jsonSlurper.parseText(file.readToString())
def FILE_HEADER = ['ID','TEST NAME','TOTALLINES', 'TOTAL COVERED', 'COVERED %']
new File(outPutCSV).withWriter { fileWriter ->
csvFilePrinter = new CSVPrinter(fileWriter, CSVFormat.DEFAULT)
csvFilePrinter.printRecord(FILE_HEADER)
results.each{
csvFilePrinter.printRecord([it.id, it.name, it.totalLines, it.totalCovered, it.coveredPercent])
}
}
由于我们不能再使用文件而必须使用'FilePath',所以我无法终生想出如何使用新FilePath来访问以前的csv编写器。我的想法是您做不到,因为我在查找文档时遇到麻烦,您可以在其中添加带有文件路径的文件或使用它编写csv文件。我的想法只是创建一个字符串值并将csv分配给写入文件,但是,我无法使它看起来正确或正常工作。
我当前的代码:
def jsonSlurper = new JsonSlurper()
// access the files on the current workspace regardless slave or master
def file = new FilePath(channel, envVars['WORKSPACE'] + separator + 'FDCUtilities' + separator + 'GroovyTest' + separator + 'json.json')
def outPutCSV = new FilePath(channel, envVars['WORKSPACE'] + separator + 'FDCUtilities' + separator + 'GroovyTest' + separator + 'test.csv')
def results = jsonSlurper.parseText(file.readToString())
test = "ID,TEST NAME,TOTAL LINES,TOTAL COVERED,COVERED %"
results.each {
test = test.concat(it.id, it.name, it.totalLines, it.totalCovered, it.coveredPercent, "\n")
}
outPutCSV.write(test ,null)
我仍在学习groovy和jenkins的合作,因此将不胜感激!
答案 0 :(得分:2)
请勿使用Groovy的I / O函数,因为它们将在Jenkins Master上执行。始终使用Pipeline DSL steps,在这种情况下请使用writeFile
。