В разделе Jenkinsfile под сценарием я использую следующий код, чтобы вернуть что-то вроде следующего.

deleting 1
deleting 2
deleting 3

Я пробовал следующий скрипт, но он, кажется, не работает.

script {
       prdirectory_lists = ['1','2','3']
       def size3 = prdirectory_lists.size()

        for(k=0;k<size3;k++){
        sh(returnStdout: true, script: 'ssh user1@192.168.1.12 echo deleting prdirectory_lists[k] ')
        //sh(returnStdout: true, script: 'ssh user1@192.168.1.12 echo deleting ${prdirectory_lists[k]} ')
        //sh(returnStdout: true, script: 'ssh user1@192.168.1.12 echo "deleting ${prdirectory_lists[k]}" ')
         }
}
0
satish kumar 10 Фев 2020 в 10:11

3 ответа

Лучший ответ

Вы должны использовать правильную интерполяцию строки, которая "${variable}", чтобы получить доступ к значению переменной.

sh(returnStdout: true, script: 'ssh user1@192.168.1.12 echo deleting "${prdirectory_lists[k]}" ')

В официальной документации Jenkins есть несколько хороших примеров для этого: Строковая интерполяция

0
Michael Kemmerzell 10 Фев 2020 в 07:50

Вы всегда используете строки в одинарных кавычках, которые не имеют возможности интерполяции строк

Следующее должно работать:

def list = ['1','2','3']

list.each {item ->
   sh(returnStdout: true, script: "ssh user1@192.168.1.12 echo deleting $item")
}

Всего в Groovy есть три типа строк:

  1. Одинарные кавычки - как обычные Java-строки без интерполяции строк
  2. Двойные кавычки - однострочные строки с возможностью интерполяции
  3. Triple Quoted - многострочная строка с возможностью интерполяции

Я полагаю, что строки Doble Quoted подойдут вам лучше всего в этом случае

0
Mark Bramnik 10 Фев 2020 в 07:51

Попробуй это:

        sh returnStdout: true, 
           script: """ssh user1@192.168.1.12 echo "deleting ${prdirectory_lists[k]}" """
0
MaratC 10 Фев 2020 в 07:48