繁体   English   中英

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

[英]How to pass groovy variable to shell script in Jenkinsfile?

在脚本部分下的 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]}" ')
         }
}

尝试这个:

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

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

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

Jenkins 官方文档为此提供了一些很好的示例: 字符串插值

您总是使用没有字符串插值功能的单引号字符串

以下应该工作:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM