如何使用可选参数执行 groovy 共享库

How to execute a groovy share library with optional parameters

我正在开发一个共享库来从我的 Jenkinsfile 中执行它。这个库有一个带有可选参数的函数,我希望能够通过指定我的值来使用任意数量的参数执行这个函数。我一直在谷歌上搜索很多,但找不到好的答案,所以也许这里有人可以帮助我。 例子: 该函数看起来像这样:

def doRequest(def moduleName=env.MODULE_NAME, def environment=env.ENVIRONMENT, def repoName=env.REPO_NAME) {
<some code goes here>
}

如果我以这种方式从我的 Jenkinsfile 执行它:

script {
    sendDeploymentStatistics.doRequest service_name
}

函数将“service_name”值赋给 moduleName,但如何指定“repoName”参数? 在 Python 中,你会以某种方式这样做:

function_name(moduleName=service_name, repoName=repo_name)

但是在Groovy + Jenkinsfile中我找不到正确的方法。

谁能帮我找出正确的语法?

谢谢!

Groovy有Default Parameters的概念。如果更改参数的顺序,使环境最后出现:

def doRequest(def moduleName=env.MODULE_NAME, def repoName=env.REPO_NAME, def environment=env.ENVIRONMENT) {
    <some code goes here>
}

然后您对 function_name 的调用将采用 environment 的默认值:

function_name(moduleName=service_name, repoName=repo_name)

Groovy 然而也对 Named Parameters 有某种支持。它不如 Python 好,但您可以按如下方式使用它:

env = [MODULE_NAME: 'foo', ENVIRONMENT: 'bar', REPO_NAME: 'baz']

def doRequest(Map args = [:]) {
    defaultMap = [moduleName: env.MODULE_NAME, environment: env.ENVIRONMENT, repoName: env.REPO_NAME]
    args = defaultMap << args
    return "${args.moduleName} ${args.environment} ${args.repoName}"
}
 
assert 'foo bar baz' == doRequest()
assert 'foo bar qux' == doRequest(repoName: 'qux')
assert '1 2 3' == doRequest(repoName: '3', moduleName: '1', environment: '2')

对于命名参数,您需要一个 Map 类型的参数(默认值为空映射)。 Groovy 然后将在调用函数时将参数映射到 Map 中的条目。

要使用默认值,您需要使用默认值创建一个映射,并将该 defaultMap 与传入的参数合并。