Has anyone tried a way to add or update an ENVIRONMENT variable in a Jenkins slave's configuration using Jenkins Rest/API or any other way.
Using Jenkins Swarm plugin, I created a slave (it uses JLNP to connect to the Jenkins master) but ENVIRONMENT variables (checkbox is not ticked) and there are no ENVIRONMENT variables created by Swarm client jar (by default). A user can manually add if reqd but I'm looking if there's a way to add / update ENV variables in a slave.
I want to create multiple swarm slaves (where each slave has different tools with different values i.e. slave01 JAVA_HOME=/path/jdk1.7.0.67 and other slave02 JAVA_HOME=/path/jdk1.8.0_45 etc etc).
I tried looking into http://javadoc.jenkins-ci.org/hudson/model/Node.html or http://javadoc.jenkins-ci.org/hudson/model/Slave.html or http://javadoc.jenkins-ci.org/hudson/slaves/DumbSlave.html but it doesn't provide any method / way to set Node's properties / ENV variables. There's no setNodeProperties or something like that (if that's the correct method to set the ENV variables/properties).
What I'm looking for is a way to add the following variables to the slave.
This post (by Villiam) reflects that someone tried groovy piece to do the same but I don't see how he can set ENV variables using the same API to Create/Manage Nodes
Jenkins-CLI has an option to run groovy scripts:
java -jar path/to/jenkins-cli.jar -s http://localhost:8080 groovy path/to/script
script:
import jenkins.model.*
import hudson.model.*
import hudson.slaves.*
Jenkins.instance.addNode(new DumbSlave("test-script","test slave description","C:\\Jenkins","1",Node.Mode.NORMAL,"test-slave-label",new JNLPLauncher(),new RetentionStrategy.Always(),new LinkedList()))
(see docs for other options: http://javadoc.jenkins-ci.org/)
You can also run an interactive groovy shell with
java -jar jenkins-cli.jar -s http://localhost:8080 groovysh
My answer is a bit of a mish-mash of other answers, but it will turn 'Environment variables' on if it's off.
A method that will work if the "Environment Variables" checkbox has not been ticked is to use
nodeProperties.add(new EnvironmentVariablesNodeProperty)
The full script I'm using to set Environment Variables on Jenkins when deploying is below (intended to be called with
jenkins-cli.jar
):When creating the node, you can pass the variables as the last parameter:
From DumbSlave here and EnvironmentVariablesNodeProperty here.
To add variables to an existing slave, we can use the following: