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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions