带有参数的自定义 Groovy 函数在 Jenkins 管道中不起作用
Custom Groovy function with arguments doesn't work in Jenkins pipeline
我正在使用一个函数在 Jenkins 管道中设置环境变量。我注意到,如果我声明不带参数的函数,它会起作用,但如果我声明接受 1 个字符串参数的函数,Jenkins 会抛出错误 No such DSL method 'get_metadata' found among steps
而 运行 我的管道。
def get_metadata(String type) {
switch(type) {
case "env":
return "environment name";
break;
case "domain":
return "domain name";
break;
case "cloud":
return "cloud name";
break;
default:
return "none";
break;
}
}
pipeline {
environment {
PROJECT=get_metadata()
CLOUD=get_metadata(type: "cloud")
DOMAIN=get_metadata(type: "domain")
ENVIRONMENT=get_metadata(type: "env")
}
}
当我像 get_metadata()
那样调用时,不带参数的函数有效
def get_metadata() {
<...>
}
Jenkins 版本是 2.289.2。
您的 get_metadata
没有为类型定义默认值,因此对 PROJECT=get_metadata()
的调用会引发错误,因为如果不传递 type
就无法按原样使用它参数.
要解决这个问题,您只需为您的函数添加一个默认值即可:
def get_metadata(String type = '') {
switch(type) {
case "env":
return "environment name";
case "domain":
return "domain name";
case "cloud":
return "cloud name";
default:
return "none";
}
}
我正在使用一个函数在 Jenkins 管道中设置环境变量。我注意到,如果我声明不带参数的函数,它会起作用,但如果我声明接受 1 个字符串参数的函数,Jenkins 会抛出错误 No such DSL method 'get_metadata' found among steps
而 运行 我的管道。
def get_metadata(String type) {
switch(type) {
case "env":
return "environment name";
break;
case "domain":
return "domain name";
break;
case "cloud":
return "cloud name";
break;
default:
return "none";
break;
}
}
pipeline {
environment {
PROJECT=get_metadata()
CLOUD=get_metadata(type: "cloud")
DOMAIN=get_metadata(type: "domain")
ENVIRONMENT=get_metadata(type: "env")
}
}
当我像 get_metadata()
def get_metadata() {
<...>
}
Jenkins 版本是 2.289.2。
您的 get_metadata
没有为类型定义默认值,因此对 PROJECT=get_metadata()
的调用会引发错误,因为如果不传递 type
就无法按原样使用它参数.
要解决这个问题,您只需为您的函数添加一个默认值即可:
def get_metadata(String type = '') {
switch(type) {
case "env":
return "environment name";
case "domain":
return "domain name";
case "cloud":
return "cloud name";
default:
return "none";
}
}