записать csv-файл на подчиненном устройстве jenkins с помощью groovy

#csv #jenkins #groovy #jenkins-pipeline #jenkins-groovy

#csv #дженкинс #groovy #дженкинс-конвейер #дженкинс-groovy

Вопрос:

Мне нужно записать csv-файл из большого файла json на подчиненном устройстве jenkins с использованием groovy. Ранее метод, который я использовал первым, запускался только на «главном», см. ниже:

 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])
    }
}
  

Поскольку мы больше не можем использовать file и должны использовать ‘FilePath’, я ни за что на свете не смогу понять, как предыдущему файлу csv-записи использовать новый FilePath. Я думаю, вы просто не можете, поскольку у меня возникли проблемы с поиском документации, где вы можете либо добавить файл с помощью filepath, либо записать с ним 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, работая вместе, поэтому буду признателен за любую помощь!

Комментарии:

1. Используете ли вы «проект в свободном стиле» в jenkins?

Ответ №1:

Не используйте функции ввода-вывода Groovy, поскольку они будут выполняться на главном устройстве Jenkins. В этом случае всегда используйте шаги Pipeline DSL writeFile .

Комментарии:

1. Проблема в том, что я буквально понятия не имею, как его использовать, даже какой импорт использовать с этим. Я очень новичок.

2. Однако в этом случае я бы выбрал WriteCSV .

3. Конечно, в наши дни определенно.. я думаю, тогда это было недоступно.