Jenkins Groovy脚本

时间:2017-02-28 03:37:20

标签: jenkins groovy jenkins-pipeline

我有一个名为MyTests的布尔参数作为构建作业的一部分。该作业调用Groovy脚本。我相信下面的特定代码会导致脚本中出现问题。想知道在Groovy中正确引用if语句中的布尔值。

stage("post_build") {
     if (${params.MyTests}) {
         my_code_block...
        }
  

java.lang.NoSuchMethodError:在步骤

中找不到这样的DSL方法'$'

2 个答案:

答案 0 :(得分:1)

删除${...}并直接写param.MyTests。只有在引用变量(或常规groovy / java表达式) 字符串时才应使用${...}。所以:

def foo = "bar"
echo foo
echo "Withing a string: ${foo}"

所以在你的情况下:

stage("post_build") {
    if (params.MyTests) {
        my_code_block...
    }
    ...

答案 1 :(得分:0)

请参阅Pipeline Syntax, Flow Control

stage('Example') {
    if (env.BRANCH_NAME == 'master') {
        echo 'I only execute on the master branch'
    }
}

JENKINS-27295

  

我想说,如果您希望确保类型一致,最好始终使用params对象。将参数引用为fooenv.foo会返回注入环境变量时的值,并始终为String类型。

properties([parameters([booleanParam(defaultValue: false, description: '', name: 'foo')])])

echo "foo: " + foo.getClass().toString()
echo "env.foo: " +  env.foo.getClass().toString()
echo "params.foo: " + params.foo.getClass().toString()
     

返回:

[Pipeline] echo
foo: class java.lang.String
[Pipeline] echo
env.foo: class java.lang.String
[Pipeline] echo
params.foo: class java.lang.Boolean
[Pipeline]