Струйный трубопровод Jenkins и петля - PullRequest
0 голосов
/ 16 мая 2019

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

Текст = "test1.var1.eu-+20190414121923517200000001 test2.var2.ue1-20190414121925623400000002 test3.var3.ue1-20190414121926583500000003"

Я в основном хочу пойти в цикле и для каждого элемента выполнить действие. например, эхо каждого по очереди. Эхо будет смотреть на строку и возвращать каждый элемент в цикле for, где есть 1 или более результатов

ожидаемый результат:

test1.var1.eu-+20190414121923517200000001

test2.var2.ue1-20190414121925623400000002

test3.var3.ue1-20190414121926583500000003

Я пробовал несколько вещей, включая добавление sh для запуска цикла for

#!/usr/local/bin/groovy

pipeline {
  parameters {
    choice(choices: "1\n2\n3", description: 'The length of time for the environment to remain up', name: 'hours')
  }

  stages {
    stage('get and update hours') {
      steps {
        script {
          env.text="test1.var1.eu-20190414121923517200000001 test2.var2.ue1-20190414121925623400000002 test3.var3.ue1-20190414121926583500000003"
          sh "echo ${text}"
          sh "for value in ${text}; do echo $value; done"
        }
      }
    }
  }
}

ожидаемый результат

test1.var1.eu-+20190414121923517200000001

test2.var2.ue1-20190414121925623400000002

test3.var3.ue1-20190414121926583500000003

фактический результат:

[Трубопровод] Конец трубопровода [Office365connector] Нет веб-крючков для уведомления groovy.lang.MissingPropertyException: Нет такого свойства: значение для класса:> groovy.lang.Binding at groovy.lang.Binding.getVariable (Binding.java:63) в org.jenkinsci.plugins.scriptsecurity.sandbox.groovy.SandboxInterceptor.onGetProperty (SandboxInterceptor.java:264) в org.kohsuke.groovy.sandbox.impl.Checker $ 6.call (Checker.java:288) в org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty (Checker.java:292) в org.kohsuke.groovy.sandbox.impl.Checker.checkedGetProperty (Checker.java:268)

1 Ответ

0 голосов
/ 17 мая 2019

В какой момент вы хотите разделить это на отдельные тексты?Как правило, эта часть отсутствует .split(' ').

def texts = text.split(' ')
for (txt in texts) {
    sh "echo ${txt}"
}

Если вы действительно хотите сделать это в своей оболочке, добавьте непосредственно экранированные кавычки и используйте переменную

sh "test=\"${text}\";for value in $test; do echo $value; done"
...