0

我在 Groovy 脚本中遇到问题,其中变量在 shell 脚本部分中不可访问。

脚本 1:

 def a=20;
 println ("a is: $a");

输出 1:

a is: 20

脚本 2:

def a=20;
println ("a is: $a");
sh '''echo a is $a''';

输出 2:

groovy.lang.MissingMethodException:没有方法签名:Script1.sh() 适用于参数类型:(java.lang.String) 值:[echo a is $a] 可能的解决方案:use([Ljava.lang.Object; ), is(java.lang.Object), run(), run(), any(), with(groovy.lang.Closure) at Script1.run(Script1.groovy:3)

我怎样才能$a = 20进入外壳部分sh。换句话说,在 shell 脚本部分传递变量 $a 需要什么操作。

我在 Jenkins 管道的上下文中编写这个脚本,我遇到了一个问题,即常规变量在 shell 部分中不可见。

4

1 回答 1

1

这有效:

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                script {
                    // a is accessible globally in the Jenkinsfile
                    a = 20
                    // b is only accessible inside this script block
                    def b = 22
                    sh "echo a is $a"
                    sh "echo b is $b"
                }
            }
        }
    }
    post { 
        always { 
            sh "echo a is $a"
        }
    }
}

您应该对 shell 语句使用双引号,而不是三重单引号。

于 2017-05-26T12:21:14.147 回答