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

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

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")
    }   
 }

它工作得很好,我明白了

我叫 Foo

我今年 21 岁

但是,我想按位置设置参数,以便无论它们如何放置都能正确打印。

但是当我这样做的时候

stage ('Shared Library') {
   steps {
      name(age: "21", name: "Foo")
    }   
 }

我明白了

My name is null

My age is null

有没有办法正确设置它?

最佳答案

您在这里要问的是如何使用 Map 类型作为自定义步骤方法全局变量的输入参数。 age: "21", name: "Foo" 在这种情况下将是一个 Map。您可以像这样为您的自定义步骤重构全局变量方法:

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}"
}

关于jenkins - 如何在 Jenkins Groovy 中设置位置参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69290082/

相关文章:

groovy - 使用RESTClient将xml文件上传到Artifactory时文件过早结束

Groovy类型转换

java - Jenkins + Github -- 触发java程序

jenkins - Jenkins Pipeline Artifactory插件错误:无法读取生成的生成信息

Jenkins 管道 bat 多行

git - Jenkins 管道抛出 java.io.NotSerializableException : org. jenkinsci.plugins.workflow.job.WorkflowRun 即使使用 @NonCPS

jenkins - 如何在 Jenkins 声明性管道脚本 block 内循环分配 env

jenkins 管道从 scm 获取管道脚本下的存储库 url 变量

docker - 如何从文件加载 Jenkins 管道 (Jenkinsfile) 的 Docker 部分?

xcode - 在当前位置找不到 oclintcompile_commands.json