如何在 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}"
}