Как передать переменную groovy в скрипт оболочки в Jenkinsfile?

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

deleting 1
deleting 2
deleting 3

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

script {
       prdirectory_lists = [Ƈ',ƈ',Ɖ']
       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]}" ')
         }
}

Всего 3 ответа


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

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

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


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

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

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

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

def list = [Ƈ',ƈ',Ɖ']

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 подойдут вам лучше всего в этом случае


Есть идеи?

10000