#python #jenkins #groovy #pipeline
Вопрос:
выход из list.py является [‘test1′,’test2′,’test3’]
когда я использую list.py в декларативном конвейере Дженкинса для создания динамических этапов,
output = sh(script: "python3 list.py", returnStdout: true ) for(int i=0; i lt; output.size(); i ) { stage(output[i]) { echo output[i] } }
Я получаю результат в виде этапа 1: [
этап 2 : t
этап 3 : e
этап 4: s ……. и так далее он разбивается элемент за элементом
Но фактический результат должен быть, этап 1: тест1
этап 2 : тест2
этап 3 : тест3
Как получить этот вывод ,как разделить, чтобы получить только значения списка в декларативном конвейере Дженкинса????
Ответ №1:
output
является строковой переменной, а не списком. ( output = "['test1','test2','test3']"
)
Решение: преобразовать output
в список
output = sh(script: "python3 list.py", returnStdout: true ).replace('[','').replace("'",'').replace(']','').split(',') for(int i=0; i lt; output.size(); i ) { stage(output[i]) { echo output[i] } }
Ответ №2:
Возвращаемый вывод из sh
(или bat
) шага всегда будет строкой, которую вы затем можете преобразовать по мере необходимости в любой другой объект groovy.
Поскольку вывод на самом деле выполнен в формате groovy, вы можете просто использовать evaluate
функцию для запуска вывода и получить его в виде списка groovy.
Что-то вроде:
def output = sh script: "python3 list.py", returnStdout: true def values = evaluate "return ${output}" values.each { stage(it) { echo it } }
Вы также можете использовать def values = Eval.me("['test1','test2','test3']")
этот метод, но для его использования потребуется разрешение администратора Eval
.
Альтернативой будет анализ строки самостоятельно, удалив все [
]
'
символы и из выходной строки, а затем разделив ее запятой ( ,
).
Что-то вроде:
def output = sh script: "python3 list.py", returnStdout: true def values = output.replaceAll(/[[]']/,'').tokenize(',') values.each { stage(it) { echo it } }