如何将groovy变量传递给Jenkinsfile中的shell脚本?

时间:2020-02-10 07:11:33

标签: shell jenkins groovy jenkins-pipeline

在脚本部分的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 :(得分:0)

尝试一下:

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

答案 1 :(得分:0)

您必须使用正确的字符串插值"${variable}"来访问变量的值。

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

Jenkins官方文档对此提供了一些很好的示例:String interpolation

答案 2 :(得分:0)

您始终使用不带内插功能的单引号字符串

以下方法应该起作用:

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. 三重引号-具有插值功能的多行字符串

在这种情况下,我相信双引号字符串将最适合您

相关问题