Jenkinsfile:如何使用命名参数调用 groovy 函数

app*_*ber 6 groovy jenkins jenkins-pipeline

我有一个简单的声明式管道,里面有函数。如何正确使用函数的命名参数?

def getInputParams(param1='a', param2='b') {
    echo "param1 is ${param1}, param2 is ${param2}"
}

pipeline {
...
...
    stages {
        stage('Test) {
            steps {
                getInputParams(param1='x', param2='y')
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么命名参数在函数中变为空?

[Pipeline] echo
param1 is null, param2 is null
...
Run Code Online (Sandbox Code Playgroud)

好吧,我可以调用类似的函数getInputParams('x', 'y'),但它不是人类可读的(参数数量将来可能会增加)

mke*_*erz 9

Groovy 在 Jenkinsfile 中执行,因此您必须遵循其命名参数的语法。

foo(name: 'Michael', age: 24)
def foo(Map args) { "${args.name}: ${args.age}" }
Run Code Online (Sandbox Code Playgroud)

引用Groovy 的命名参数

像构造函数一样,普通方法也可以使用命名参数调用。他们需要以地图的形式接收参数。在方法主体中,可以像在法线贴图 (map.key) 中一样访问这些值。

def getInputParams(Map map) {
    echo "param1 is ${map.param1}, param2 is ${map.param2}"
}

pipeline {
...
    stages {
        stage('Test') {
            steps {
                getInputParams(param1: 'x', param2: 'y')
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)