Jenkins 管道 - 使用参数构建

Jenkins Pipeline - Build with parameters

我正在尝试使用 build 方法和 jenkins 管道执行已定义的作业。 这是一个简单的例子:

 build('jenkins-test-project-build', param1 : 'some-value')

但是当我尝试执行它时出现错误:

java.lang.IllegalArgumentException: Expected named arguments but got [{param1=some-value}, jenkins-test-project-build]
at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:442)
at org.jenkinsci.plugins.workflow.cps.DSL.parseArgs(DSL.java:380)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeStep(DSL.java:156)
at org.jenkinsci.plugins.workflow.cps.DSL.invokeMethod(DSL.java:126)
...............

您收到此错误,因为您没有传递应存储 'jenkins-test-project-build' 的属性的名称。

在您的情况下,您应该传递 job 属性。

build(job: 'jenkins-test-project-build', param1 : 'some-value')

以下是可用选项列表(pipeline-build-step):

  • 工作
  • 参数(可选)
  • 传播(可选)
  • quietPeriod(可选)
  • 等待(可选)

您的构建调用中有多个问题。

首先,正如 sshepel 提到的那样,如果你有多个参数,你应该命名你的参数(只有当你只使用默认参数时你才会忘记命名它job, 例如 build 'my-simple-job-without-params').

第二个问题是您没有正确传递参数。要将参数传递给下游作业,您应该使用名为 parameters 的参数并为其提供定义每个参数的对象数组,例如:

build job: 'jenkins-test-project-build', parameters: [[$class: 'StringParameterValue', name: 'param1', value: "some-value" ]]

另外,请注意括号在 Groovy 方法调用中是可选的。

使用特定 jenkins 服务器的管道代码生成器生成代码,在我的例子中,这是由于版本不匹配而发生的,我们使用不同的版本进行开发和生产,每个版本都使用不同的语法来调用作业并传递参数。