如何在 Jenkins 中设置位置参数 Groovy
How To Set Positional Arguments in Jenkins Groovy
Groovy 支持位置参数吗?
我在 Jenkins 共享库中定义了一个函数 name.groovy
def call(name, age) {
sh """
echo "My name is: ${name}"
echo "My age is: ${age}"
"""
}
当我从管道中调用它时
stage ('Shared Library') {
steps {
name("Foo", "21")
}
}
效果很好,我得到了
My name is Foo
My age is 21
但是,我想按位置设置参数,以便无论它们如何放置都能正确打印。
但是当我这样做的时候
stage ('Shared Library') {
steps {
name(age: "21", name: "Foo")
}
}
我明白了
My name is null
My age is null
有没有正确设置的方法?
您在这里问的是如何使用 Map 类型作为自定义步骤方法全局变量的输入参数。 age: "21", name: "Foo"
在这种情况下将是一个地图。您可以像这样为您的自定义步骤重构全局变量方法:
def call(Map args) {
sh """
echo "My name is: ${args.name}"
echo "My age is: ${args.age}"
"""
}
然后您可以在管道步骤中调用:
stage ('Shared Library') {
steps {
name(age: '21', name: 'Foo')
}
}
符合预期的结果。
我们还可以使用一些固有的 Groovy 方法和空合并运算符的参数检查来改进该方法:
def call(Map args) {
// provide defaults for arguments
args.name = args.name ?: 'no name'
args.age = args.age ?: 'unknown age'
// output name and age to stdout
print "My name is: ${args.name}"
print "My age is: ${args.age}"
}
Groovy 支持位置参数吗?
我在 Jenkins 共享库中定义了一个函数 name.groovy
def call(name, age) {
sh """
echo "My name is: ${name}"
echo "My age is: ${age}"
"""
}
当我从管道中调用它时
stage ('Shared Library') {
steps {
name("Foo", "21")
}
}
效果很好,我得到了
My name is Foo
My age is 21
但是,我想按位置设置参数,以便无论它们如何放置都能正确打印。
但是当我这样做的时候
stage ('Shared Library') {
steps {
name(age: "21", name: "Foo")
}
}
我明白了
My name is null
My age is null
有没有正确设置的方法?
您在这里问的是如何使用 Map 类型作为自定义步骤方法全局变量的输入参数。 age: "21", name: "Foo"
在这种情况下将是一个地图。您可以像这样为您的自定义步骤重构全局变量方法:
def call(Map args) {
sh """
echo "My name is: ${args.name}"
echo "My age is: ${args.age}"
"""
}
然后您可以在管道步骤中调用:
stage ('Shared Library') {
steps {
name(age: '21', name: 'Foo')
}
}
符合预期的结果。
我们还可以使用一些固有的 Groovy 方法和空合并运算符的参数检查来改进该方法:
def call(Map args) {
// provide defaults for arguments
args.name = args.name ?: 'no name'
args.age = args.age ?: 'unknown age'
// output name and age to stdout
print "My name is: ${args.name}"
print "My age is: ${args.age}"
}