Jenkins Slave - How to add or update ENVIRONMENT variables Jenkins Slave - How to add or update ENVIRONMENT variables jenkins jenkins

Jenkins Slave - How to add or update ENVIRONMENT variables


When creating the node, you can pass the variables as the last parameter:

import jenkins.model.*import hudson.model.*import hudson.slaves.*entry = new EnvironmentVariablesNodeProperty(new EnvironmentVariablesNodeProperty.Entry("MY_NAME", "my_value"))list = new LinkedList()list.add(entry)Jenkins.instance.addNode(new DumbSlave("test-slave", "test slave description", "C:\\Jenkins", "1", Node.Mode.NORMAL, "test-slave-label", new JNLPLauncher(), new RetentionStrategy.Always(), list))

From DumbSlave here and EnvironmentVariablesNodeProperty here.

To add variables to an existing slave, we can use the following:

import jenkins.model.*import hudson.model.*import hudson.slaves.*jenkins = Jenkins.instancenode = jenkins.getNode('test-slave')props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)for (prop in props) {  prop.envVars.put("MY_OTHER_NAME", "my_other_value")}jenkins.save()


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):

import jenkins.model.*import hudson.model.*import hudson.slaves.*String node_name = args[0]String env_key = args[1]String env_value = args[2]instance = Jenkins.getInstance()if (node_name == "master") {  node = instance} else {  instance.getNode(node_name)}props = node.nodeProperties.getAll(hudson.slaves.EnvironmentVariablesNodeProperty.class)if(props.empty) {  def entry = new EnvironmentVariablesNodeProperty.Entry(env_key, env_value)  def evnp = new EnvironmentVariablesNodeProperty(entry)  node.nodeProperties.add(evnp)} else {  for (prop in props) {    prop.envVars.put(env_key, env_value)  }}instance.save()


My answer is a bit of a mish-mash of other answers, but it will turn 'Environment variables' on if it's off.

public class KeyValuePair {    String key    String value}...KeyValuePair[] environmentVariables = [...]...import hudson.slaves.EnvironmentVariablesNodePropertyJenkins jenkins = Jenkins.instanceList<EnvironmentVariablesNodeProperty> nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)if (nodeProperties.empty) { // Enable 'Environment variables' under 'Global properties'    jenkins.globalNodeProperties.add(new EnvironmentVariablesNodeProperty())    nodeProperties = jenkins.globalNodeProperties.getAll(EnvironmentVariablesNodeProperty.class)}for (int nodePropertyIndex = 0; nodePropertyIndex < nodeProperties.size(); nodePropertyIndex++) {    EnvironmentVariablesNodeProperty nodeProperty = nodeProperties[nodePropertyIndex]    for (int environmentVariableIndex = 0; environmentVariableIndex < environmentVariables.size(); environmentVariableIndex++) {        KeyValuePair environmentVariable = environmentVariables[environmentVariableIndex]        nodeProperty.envVars.put(environmentVariable.key, environmentVariable.value)    }}jenkins.save()