2017-05-26 95 views
0

我在Groovy脚本中遇到问题,其中该变量在shell脚本部分中不可访问。Groovy参数在Jenkinsfile的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:

常规。 lang.MissingMethodException:没有方法的签名:Script1.sh()适用于参数类型:(java.lang.String)values:[echo a是$ a] 可能的解决方案:use([Ljava.lang.Object;)是(java.lang.Object继承),运行(),运行(),任(),用(groovy.lang.Closure) 在Script1.run(Script1.groovy:3)

哪有我在壳牌部分sh中获得$a = 20。换句话说,需要在shell脚本部分中传递变量$ a所需的操作。

我正在写一个Jenkins管道的上下文中的脚本,我正面临一个问题,即groovy变量在shell部分中不可见。

回答

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语句,而不是三联单引号。

+0

谢谢,我学到了一两件事,但你确定第二点吗?在一个普通的Groovy脚本中,情况并非如此(如OP所示),但是在Jenkins Pipeline脚本中却有所不同? (我明白他们是......特别的)。或者你的意思是我们*应该使用大括号? (我明白) – qlown

+0

@qlown你是对的,第二点是不正确的。调整我的答案。 – haschibaschi

+0

@haschibaschi,请参考此链接https://groovyconsole.appspot.com/script/5088905221111808我仍然得到相同的问题 – Yash

相关问题