Кажется, что в следующем фрагменте кода:
def formattedPaths = affectedFiles.collect {
"${it.editType.name} ${it.path}"
}
по крайней мере, иногда formattedPaths
оценивается как GString вместо списка. Этот фрагмент кода является фрагментом более крупного сценария Jenkins Workflow, например:
node {
currentBuild.rawBuild.changeSets[0].collect {
"""<b>${it.user}</b> @ rev. ${it.revision}: ${it.msg}
${affectedFilesLog(it.affectedFiles)}"""
}
}
def affectedFilesLog(affectedFiles) {
println "Affected files [${affectedFiles.class}]: $affectedFiles"
def formattedPaths = affectedFiles.collect {
"${it.editType.name} ${it.path}"
}
println "formattedPaths [${formattedPaths.class}]: $formattedPaths"
formatItemList(formattedPaths)
}
def formatItemList(list) {
if (list) {
return list.join('\n')
}
return '(none)'
}
Запуск этого скрипта в Jenkins приводит к выводу:
Running: Print Message
Affected files [class java.util.ArrayList]: [hudson.scm.SubversionChangeLogSet$Path@5030a7d8]
Running: Print Message
formattedPaths [class org.codehaus.groovy.runtime.GStringImpl]: edit my/path/flow.groovy
(...)
groovy.lang.MissingMethodException: No signature of method: java.lang.String.join() is applicable for argument types: (java.lang.String) values: [
]
И это заставляет меня поверить, что в коде:
println "Affected files [${affectedFiles.class}]: $affectedFiles"
def formattedPaths = affectedFiles.collect {
"${it.editType.name} ${it.path}"
}
println "formattedPaths [${formattedPaths.class}]: $formattedPaths"
affectedFiles
равно ArrayList
(скрипт выводит Affected files [class java.util.ArrayList]: [hudson.scm.SubversionChangeLogSet$Path@5030a7d8]
в выводе)
но результатом выполнения метода сбора на нем - присвоенного formattedPaths
- является GString (выход: formattedPaths [class org.codehaus.groovy.runtime.GStringImpl]: edit my/path/flow.groovy
)
Разве метод сбора не должен всегда возвращать список?
Running: Print Message
повторяется дважды? Это работает с несколькими потоками? Я подозреваю, что второй поток может дать сбой, но вы смотрите на распечатку первого потока... - person tim_yates   schedule 03.11.2015