Global shared variables in Jenkins Groovy pipelines

It seems like it's really difficult to be able to store a bunch of variables for use in shared code in Jenkins/Groovy scripted pipelines. I've tried a bunch of methods and none of them seem to give the desired result.

This method looked the most promising, but the values all came back as null in the calling pipeline. Get Global Variables in jenkins pipeline.

My codes is something lie

import org.blabla.JobHelper

println("env.NO_PROXY: -->${env.NO_PROXY}<--")

And in the JobHelper.groovy file, I've defined

package org.blabla.project
env.NO_PROXY = 'localhost,127.0.0.1,169.254.169.254'

the names have been changed a bit to protect the innocent, but you get the idea.

the script just prints null for the value.

Is there a simple way (or indeed any way) that I can pull in a bunch of variables from a shared library file? This feels like it should be a really simple exercise, but after spending many hours searching I'm none the wiser.


In general, env is only available once the pipeline has started, but groovy scripts are resolved much earlier.

I'm using static class members as global variables. Applied to your code sample, it would look like this:

JobHelper.groovy

package org.blabla.project

# Class must be named like the file that contains it.
class JobHelper {
    static String getNO_PROXY() { 'localhost,127.0.0.1,169.254.169.254' }
}

Elsewhere:

import org.blabla.project

println("NO_PROXY: -->${JobHelper.NO_PROXY}<--")

Note that Groovy automatically generates properties from get*() and set*() methods, so we can use the short form instead of having to write JobHelper.getNO_PROXY().