如何在 Jenkins Groovy 中设置位置参数

Posted

技术标签:

【中文标题】如何在 Jenkins Groovy 中设置位置参数【英文标题】:How To Set Positional Arguments in Jenkins Groovy 【发布时间】:2021-11-16 06:23:46 【问题描述】:

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

有没有办法正确设置?

【问题讨论】:

【参考方案1】:

您在这里要问的是如何使用 Map 类型作为自定义 step 方法全局变量的输入参数。在这种情况下,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"

【讨论】:

谢谢马特。这行得通。

以上是关于如何在 Jenkins Groovy 中设置位置参数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 HTTPBuilder 在 Groovy 中设置 GET-Response

如何在 Blazemeter 测试中通过 Jenkins 在 .jmx 文件中设置参数

如何在 Jenkins 中设置默认编码?

如何在 Jenkins 声明式管道中设置 PATH

如何在 Jenkins 中设置多种身份验证方式,例如 LDAP 和 Jenkins 用户数据库?

如何在 Jenkins 声明式管道中设置声纳扫描仪