Skip to content

[JENKINS-43720] NodeLabel parameters are null objects in pipeline script params #555

@jenkins-infra-bot

Description

@jenkins-infra-bot

Accessing the parameter with param will give you a null object, but accessing it through env and global will give you the string of one node.

Example:

properties ([
    parameters([
[
     $class: 'BooleanParameterDefinition',
     defaultValue: false,
     description: 'This will do a clean and build of the project.',
     name: 'Rebuild'
],
[
     $class: 'NodeParameterDefinition',
     allowedSlaves: ['ALL (no restriction)'],
     defaultSlaves: ['master'],
     description: 'What nodes to run the build on.',
     name: 'NODE_PARAM',
     nodeEligibility: [$class: 'AllNodeEligibility'],
     triggerIfResult: 'allowMultiSelectionForConcurrentBuilds'
]
    ])
])

echo "NODE_PARAM: " + NODE_PARAM.getClass().toString()
echo "env.NODE_PARAM: " + env.NODE_PARAM.getClass().toString()
echo "params.NODE_PARAM: " + params.NODE_PARAM.getClass().toString()

Will give you this output:

[Pipeline] echo
NODE_PARAM: class java.lang.String
[Pipeline] echo
env.NODE_PARAM: class java.lang.String
[Pipeline] echo
params.NODE_PARAM: class org.codehaus.groovy.runtime.NullObject

As you can see, only params.NODE_PARAM is null. 

The problem is that I can not use env.NODE_PARAM or NODE_PARAM to get multiple selection of nodes, as those are only a string representation of a single node.

 


Originally reported by snellingen, imported from: NodeLabel parameters are null objects in pipeline script params
  • status: Open
  • priority: Minor
  • component(s): nodelabelparameter-plugin
  • label(s): jenkins, pipeline, plugin
  • resolution: Unresolved
  • votes: 13
  • watchers: 15
  • imported: 20251210-235911
Raw content of original issue

Accessing the parameter with param will give you a null object, but accessing it through env and global will give you the string of one node.

Example:

properties ([
    parameters([
        [
             $class: 'BooleanParameterDefinition',
             defaultValue: false,
             description: 'This will do a clean and build of the project.',
             name: 'Rebuild'
        ],
        [
             $class: 'NodeParameterDefinition',
             allowedSlaves: ['ALL (no restriction)'],
             defaultSlaves: ['master'],
             description: 'What nodes to run the build on.',
             name: 'NODE_PARAM',
             nodeEligibility: [$class: 'AllNodeEligibility'],
             triggerIfResult: 'allowMultiSelectionForConcurrentBuilds'
        ]
    ])
])

echo "NODE_PARAM: " + NODE_PARAM.getClass().toString()
echo "env.NODE_PARAM: " + env.NODE_PARAM.getClass().toString()
echo "params.NODE_PARAM: " + params.NODE_PARAM.getClass().toString()

Will give you this output:

[Pipeline] echo
NODE_PARAM: class java.lang.String
[Pipeline] echo
env.NODE_PARAM: class java.lang.String
[Pipeline] echo
params.NODE_PARAM: class org.codehaus.groovy.runtime.NullObject

As you can see, only params.NODE_PARAM is null. 

The problem is that I can not use env.NODE_PARAM or NODE_PARAM to get multiple selection of nodes, as those are only a string representation of a single node.

 

environment
Jenkins ver. 2.15 on Windows,<br/>
NodeLabel 1.7.2,<br/>
Pipeline: Groovy 2.29

Metadata

Metadata

Assignees

No one assigned

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions