2017-02-28 14 views
-1

ビルドジョブの一部としてMyTestsという名前のブール型パラメータがあります。ジョブはGroovyスクリプトを呼び出します。私は以下の特定のコードがスクリプト内で問題を引き起こしていると考えています。 Groovyでif文の中のブール値を参照する適切な方法に関するアイデア。Jenkins Groovyスクリプト

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

java.lang.NoSuchMethodError: No such DSL method '$' found among steps

答えて

1

${...}を取り外し、直接param.MyTestsを書きます。 ${...}は、の文字列内の変数(または正規のgroovy/java式)を参照する場合にのみ使用してください。だから、:あなたの中のSO

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

はケースだ:?自動的にTrueに評価またはI = trueを追加する必要があります上記の設定

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

でしょう... – user2040074

+0

いいえ、'params.MyTests'ます以下のGerold Broserの答えの引用符を参照してください。基本的に 'params'のオブジェクトには、パラメータの型に対応するオブジェクトがあります。 –

0

Pipeline Syntax, Flow Controlを参照してください:

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

JENKINS-27295

I would say that it is a best practice to always use the params object if you want the ensure that the type is consistent. Referencing the parameter as either foo or env.foo returns the value as it was injected into an environment variable and will always be of type 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() 

returns:

[Pipeline] echo 
foo: class java.lang.String 
[Pipeline] echo 
env.foo: class java.lang.String 
[Pipeline] echo 
params.foo: class java.lang.Boolean 
[Pipeline] 
関連する問題