3

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

有没有办法正确设置它?

4

1 回答 1

2

您在这里要问的是如何使用 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 方法和使用 null 合并运算符的参数检查来改进该方法:

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}"
}
于 2021-09-22T20:49:06.820 回答