If you’re writing a groovy class that’s run from a library in the pipeline
script then you’re not going to be able to use System.getEnv().
There’s a few approaches you can take that do work:
- You can pass in the values you need as parameters to the methods/constructors
you’re using.
- In the pipeline there’s the global variable `env` which is a map of all the
currently declared environment variables (JOB_NAME etc) you could pass into
your class.
- Pass in `this` from the pipeline script. You can then use this object to
access anything in pipeline, (Let’s assume you called the field/parameter ctx)
i.e. ctx.env.JOB_NAME or ctx.powershell(“write-host ‘spooky’”)
I noticed also you’ve got a direct execution of a process commented out, don’t
do that either. The same way System.getEnv() doesn’t work, doing that will not
behave as expected either (Assuming the sandbox will let you)
Regards,
Daniel.
From: red 888
Sent: 29 November 2017 20:28
To: Jenkins Users
Subject: Re: How can I inject environment variables into my groovy class?
So this is a problem for me because the APIs I'm using in the groovy class are
looking for OS level environment variables.
Is there any way to set these variables with jenkins?
On Tuesday, November 28, 2017 at 5:54:37 PM UTC-5, mpapo - Michael Pailloncy
wrote:
Pipeline environment variables are not stored at the OS level. That's why you
are not able to get them using System.getenv() (which only list OS level
environment variables).
But you should be able to retrieve them like any other classical environment
variables : with the "${MyVar}" syntax inside your shared lib class.
Hopefully it helps.
Michaël
2017-11-28 22:30 GMT+01:00 red 888 <[email protected]>:
My pipeline is using the environment directive to set an environment var and
then calls a groovy class:
def call(int blah) {
pipeline {
agent any
environment {
MyVar = credentials('djsjflsjfljsf')
}
stages {
stage('Stage ONE') {
steps {
echo test.methodA()
....
But from in my groovy class I don't see those environment variables:
// vars/test.groovy
class test implements Serializable {
static methodA (){
def env = System.getenv()
return env.dump()
//return ['powershell', 'ls env:'].execute().text
}
env.dump() and listing envs from the shell from inside the class doesn't show
those variables I added in the environment directive. Can I change the scope of
the class to give it access to these environment vars?
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/87b6e2b0-ed9a-4ede-b22c-3b06761345e1%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/6e7e1b97-7b9c-404f-9597-8577eb739b96%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"Jenkins Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/jenkinsci-users/5a216231.13d4500a.b61be.a2e5%40mx.google.com.
For more options, visit https://groups.google.com/d/optout.