我有一个管道脚本,可以使用和不使用参数。所以我必须检查参数是否可用。
我尝试了if(getBinding().hasVariable("myparameter"))
,但这会导致异常
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method groovy.lang.Binding getVariables
是否有其他方法可以检查作业是否已参数化?
答案 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