As I’d said the System.getEnv() call returns the environment the Jenkins 
process is currently running in. 

When Jenkins runs an external process (ie sh) it adds the values in the env map 
to the environment of the external process. The environment of the Jenkins 
process is left untouched.
Thus “sh ‘printenv’” shows the vars (It’s an external process)
System.getEnv()  does not as you’re just getting the Jenkins process 
environment.

If you’re connecting up to Dynamo you’d generally don’t want to do that from 
within pipeline script; Things are a lot more robust if you do those sorts of 
things from an external script. 

The recommendation is to use pipeline script to orchestrate the job but leave 
the actual heavy lifting to external processes and plugins.


From: red 888
Sent: 20 November 2017 18:36
To: Jenkins Users
Subject: Re: Why aren't these injected variables making it to my groovy class?

Can you explain this i don't understand.

sh 'printenv' returns my injected variables. System.getenv() inside my function 
does not. Even if I shell out from the groovy function and run printenv I still 
don't see the variables. Why aren't they there in the context of my function?

The amazon api looks for these variables so when I run this in my function its 
looking for those two environment vars that should be injected but are not:
        def ebClient = new AmazonDynamoDBClientBuilder()
            .withCredentials(new EnvironmentVariableCredentialsProvider())
            .build()


On Monday, November 20, 2017 at 6:57:07 AM UTC-5, Daniel Butler wrote:
By doing System.getenv() you're getting the environment of the Jenkins master 
process.

The environment that will be used by any process run in the pipeline is 
available through the built-in variable env. 

Regards, 
Daniel 

On 20 Nov 2017 2:14 am, "red 888" <fakemai...@gmail.com> wrote:
In my pipeline I'm injecting aws credentials:

withCredentials([[$class: 'AmazonWebServicesCredentialsBinding',
credentialsId: '89h9sfh8shf98shf98he9f8sf',
accessKeyVariable: 'AWS_ACCESS_KEY_ID',
secretKeyVariable: 'AWS_SECRET_ACCESS_KEY']]) {

    sh 'printenv'

    echo myFunc.myMeth('blah','sdjlfkdf')

}

myFunc looks like this:

class myFunc {
    static Object myMeth (String param1, String param2){


        def env = System.getenv()
        //Print all the environment variables.
        env.each{
            println it
        }
    }
}

Looking at the output of sh 'printenv' I see AWS_ACCESS_KEY_ID and 
AWS_SECRET_ACCESS_KEY are injected. But when I try to echo back what envs 
myFunc has access to I don't see those variables. Is this by design? Is myFunc 
isolated and I need change its scope or something?
-- 
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 jenkinsci-use...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/6dfaad11-29f5-4287-a0a0-a16a2373ecd4%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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/89ce7f8b-99ae-4e47-abbb-a57e0f306fcc%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 jenkinsci-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/jenkinsci-users/5a1400f0.cebe500a.3a6dc.5945%40mx.google.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to