Как создать и l oop поверх ArrayList строк в Jenkins Groovy Pipeline - PullRequest
0 голосов
/ 10 апреля 2020

Как указано в заголовке, я пытаюсь выполнить l oop над ArrayList строками в сценарии Jenkins Groovy Pipeline (используя синтаксис сценария Pipeline). Позвольте мне изложить всю «проблему» для вас.

Я начну со строки местоположений файловой системы, разделенных пробелами: «/ var / x / var / y / var / z ...» примерно так. Я oop над этой строкой добавляю каждый символ к временному значению string. И затем, когда я достигаю пробела, я добавляю эту временную строку в массив и перезагружаюсь. Вот некоторый код, показывающий, как я это делаю:

def full_string = "/var/x /var/y /var/z"
def temp = ""
def arr = [] as ArrayList
full_string.each {
    if ( "$it" == " " ) {
      arr.add("$temp")           <---- have also tried ( arr << "$temp" )
      temp = ""
    } else {
      temp = "$temp" + "$it"
    }
}
 // if statement to catch last element

Видите, проблема в том, что если я позже go до l oop над массивом, он решит l oop по каждому отдельному символу вместо всей строки /var/x, как я хочу.

Я новичок в Groovy, поэтому я учился, когда строил этот конвейер. Использование Jenkins версии 2.190.1, если это вообще помогает. Я просмотрел документы SO и Groovy, а также документы по синтаксису конвейера для Jenkins. Не могу найти то, что я искал. Я уверен, что мое решение не самое элегантное и эффективное, но я сначала пойму, как оно работает, прежде чем пытаться выжать из него максимальную производительность.

Я нашел этот вопрос, но он был аналогичным бесполезно: Динамическое добавление элементов в ArrayList в Groovy.

Редактирование : я пытаюсь перевести старые сценарии компоновки оболочки c компании в трубопроводы Jenkins. , Моя начальная строка - это переменная окружения, доступная на всех наших узлах, которые также должны быть доступны внутри конвейера.

TL; DR - мне нужно иметь возможность создать массив из значений, разделенных пробелами в строке, и затем иметь возможность l oop над указанным массивом, и каждый «элемент» будет полной строкой вместо один символ, чтобы я мог правильно выполнять шаги конвейера.

1 Ответ

0 голосов
/ 12 апреля 2020

Попробуйте запустить это в консоли сценариев Jenkins (your.jenkins.url.yourcompany.com/script):

def full_string = "/var/x /var/y /var/z"
def arr = full_string.split(" ")
for (i in arr) {
  println "now got ${i}"
}

Результат:

now got /var/x
now got /var/y
now got /var/z
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...