Parameters in a Jenkins Scripted Pipeline

March 8, 2018

I needed to add parameters to a Jenkins Scripted Pipeline recently, but I ran into issues with the documented syntax for parameters.

The docs on parameters specify that the following block is the correct syntax:

properties([parameters([string(defaultValue: 'Hello', description: 'How should I greet the world?', name: 'Greeting')])])

node {
  echo "${params.Greeting} World!"
}

This looks very close to the Declarative Pipeline syntax, but results in an IllegalArgumentException:

java.lang.IllegalArgumentException: Expected named arguments but got [@string(name=Greeting,defaultValue=Hello,description=How should I greet the world?)]

This is the proper syntax for the same parameters:

properties([
  [$class: 'ParametersDefinitionProperty', parameterDefinitions: [
    [$class: 'StringParameterDefinition',
      name: 'Greeting',
      defaultValue: 'Hello',
      description: 'How should I greet the world?']
  ]]
])

node {
  echo "${params.Greeting} World!"
}

Boolean parameters should be able to use BooleanParameterDefinition instead of StringParameterDefinition.

jenkins