【问题标题】:How To Set Positional Arguments in Jenkins Groovy如何在 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

有没有办法正确设置?

【问题讨论】:

    标签: jenkins groovy jenkins-pipeline jenkins-groovy positional-parameter


    【解决方案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}"
    }
    

    【讨论】:

    • 谢谢马特。这行得通。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-11
    • 2020-05-03
    相关资源
    最近更新 更多