Jenkins / Groovy - для каждого элемента в массиве выполнить скрипт оболочки с переменной из элемента - PullRequest
0 голосов
/ 29 августа 2018

У меня есть массив и функция.

Функция вызывает context.sh и выполняет команду оболочки с переменной, которую я хочу передать (следующий из массива в этом цикле).

Цель:

  1. Grep файл, использовать элемент из массива каждый цикл
  2. Если строка не пустая (возвращает значение из сценария оболочки), выведите строку с сообщением и ошибкой
  3. Экспортировать значение 'true' в переменную под названием 'найдены ошибки'.

def grepLogs(String) {

    def errorsFound = false

List<String> list = new ArrayList<String>()
list.add("some-exclude")
list.add("anotherone")
list.add("yes")

for (String item : list) {
    System.out.println(item)
    context.sh "errorFinder=$(cat logfile.log | egrep 'error|ERROR'| grep -v ${list()})"
    if (errorFinder) {
        println "Errors in log file " + errorFinder
        errorsFound = true
    }
}

    println "No errors found." 
}

Пока мне не удается заставить его проверять каждый элемент массива и изменять значение. Как мне это реализовать?

1 Ответ

0 голосов
/ 29 августа 2018

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

просто преобразуйте list в строку, разделенную | (труба).

поэтому команда оболочки будет выглядеть так:

cat logfile.log | grep 'error|ERROR'| grep -v 'some-exclude|anotherone|yes'

и перехватить стандартный вывод в переменную groovy, используя параметр returnStdout

поэтому вызов sh должен выглядеть следующим образом:

def list = [ "some-exclude", "anotherone", "yes" ]
def cmd = "cat logfile.log | grep 'error|ERROR'| grep -v '${ list.join('|') }'"
def errors = sh( returnStdout: true, script: cmd )
if( errors.trim() ){
    println "errors found: ${errors}"
}
...