Как передать переменную groovy в сценарий оболочки в Jenkinsfile? - PullRequest
0 голосов
/ 10 февраля 2020

В разделе «Сценарий 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]}" ')
         }
}

Ответы [ 3 ]

0 голосов
/ 10 февраля 2020

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

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

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

0 голосов
/ 10 февраля 2020

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

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

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. Тройные кавычки - многострочная строка с возможностью интерполяции

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

0 голосов
/ 10 февраля 2020

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

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