как разделить список на отдельные значения в декларативном конвейере Дженкинса

#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  } }