如何检查Jenkinsfile中是否有可用的构建参数

时间:2016-07-01 12:30:39

标签: jenkins jenkins-pipeline

我有一个管道脚本,可以使用和不使用参数。所以我必须检查参数是否可用。

我尝试了if(getBinding().hasVariable("myparameter")),但这会导致异常

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.Binding getVariables

是否有其他方法可以检查作业是否已参数化?

5 个答案:

答案 0 :(得分:8)

允许使用最新版本的jenkins println(getBinding().hasVariable("myparameter")),不再出错。

答案 1 :(得分:4)

我就是这样做的:

def myParam = false
if (params.myParam != null){
    myParam = params.myParam
}

为什么你可以按照上面的建议在管道中定义参数呢?

嗯,有些情况下,无论if参数是否定义,您都希望管道文件能够正常工作。即,如果您重新使用来自不同Jenkins工作的管道脚本,并且您不想使人员定义该参数...

答案 2 :(得分:3)

请参阅Getting Started with Pipeline, Build Parameters

  

构建参数

     

如果您使用使用参数构建选项将管道配置为接受参数,则可以将这些参数作为同名的Groovy变量进行访问。

<强>更新

  • 此版本已参数化添加参数字符串参数

    • 姓名STRING_PARAMETER
    • 默认值STRING_PARAMETER_VALUE
  • 管道 定义Pipeline script脚本

def stringParameterExists = true
def otherParameterExists = true

try {
  println "  STRING_PARAMETER=$STRING_PARAMETER"
  }
catch (MissingPropertyException e) {
  stringParameterExists = false
  }  

try {
  println "  NOT_EXISTING_PARAMETER=$NOT_EXISTING_PARAMETER"
  }
catch (MissingPropertyException e) {
  otherParameterExists = false
  }

println "  stringParameterExists=$stringParameterExists"
println "  otherParameterExists=$otherParameterExists"

控制台输出:

[Pipeline] echo
  STRING_PARAMETER=STRING_PARAMETER_VALUE
[Pipeline] echo
  stringParameterExists=true
[Pipeline] echo
  otherParameterExists=false
[Pipeline] End of Pipeline
Finished: SUCCESS

答案 3 :(得分:3)

较新版本通过params变量提供参数。如果未定义参数,则会回退到配置的默认值(另请参阅here)。

答案 4 :(得分:0)

问题:避免空参数或在管道作业中未配置参数

解决方案:您有2个选项,用于将默认配置设置为声明性管道中的变量

选项1 。使用jenkins设置参数作用域回退的能力,这会影响您在jenkins中对作业的管道配置(如果在声明性管道中进行配置,它将覆盖作业参数中的配置)。

parameters{    
  booleanParam(defaultValue: false, description: 'some description', name: 'SOME_FLAG')
}

选项2 自己保护变量,检查变量是否不为空,然后在管道中分配变量,此功能不会影响您的作业配置,我认为更好:

some_flag = params.SOME_FLAG != null ? params.SOME_FLAG.toBoolean() : false