nodos - jenkins slave windows
Jenkins Slave-Cómo agregar o actualizar las variables ENTORNO (3)
¿Alguien ha intentado agregar o actualizar una variable ENTORNO en la configuración de un esclavo Jenkins utilizando Jenkins Rest / API o de cualquier otro modo?
Utilizando el plugin Jenkins Swarm, creé un esclavo (usa JLNP para conectarme al maestro Jenkins) pero las variables ENTORNO (casilla de verificación no está marcada) y no hay variables ENTORNO creadas por el tarro del cliente Swarm (de forma predeterminada). Un usuario puede agregar manualmente si se requiere, pero estoy buscando si hay una forma de agregar / actualizar variables ENV en un esclavo.
Quiero crear múltiples esclavos de enjambre (donde cada esclavo tiene diferentes herramientas con diferentes valores, es decir, slave01 JAVA_HOME = / path / jdk1.7.0.67 y otro slave02 JAVA_HOME = / path / jdk1.8.0_45 etc etc).
Traté de buscar en http://javadoc.jenkins-ci.org/hudson/model/Node.html o http://javadoc.jenkins-ci.org/hudson/model/Slave.html o http: // javadoc. jenkins-ci.org/hudson/slaves/DumbSlave.html pero no proporciona ningún método / forma de establecer las propiedades / variables ENV de Node. No hay setNodeProperties o algo así (si ese es el método correcto para establecer las variables / propiedades ENV).
Lo que estoy buscando es una forma de agregar las siguientes variables al esclavo.
Esta publicación (por Villiam ) refleja que alguien intentó una pieza maravillosa para hacer lo mismo, pero no veo cómo puede establecer variables ENV usando la misma API para Crear / Administrar Nodos
Jenkins-CLI tiene una opción para ejecutar scripts maravillosos:
java -jar path/to/jenkins-cli.jar -s http://localhost:8080 groovy path/to/script
guión:
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()))
(ver documentos para otras opciones: http://javadoc.jenkins-ci.org/ )
También puede ejecutar un shell interactivo Groovy con
java -jar jenkins-cli.jar -s http://localhost:8080 groovysh
Al crear el nodo, puede pasar las variables como el último parámetro:
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))
De DumbSlave aquí y EnvironmentVariablesNodeProperty aquí .
Para agregar variables a un esclavo existente, podemos usar lo siguiente:
import jenkins.model.*
import hudson.model.*
import hudson.slaves.*
jenkins = Jenkins.instance
node = 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()
Un método que funcionará si la casilla de verificación "Variables del entorno" no se ha marcado es utilizar nodeProperties.add(new EnvironmentVariablesNodeProperty)
La secuencia de comandos completa que estoy usando para establecer Variables de entorno en Jenkins cuando se implementa está debajo (se pretende llamar con 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()
Mi respuesta es un poco confusa de otras respuestas, pero activará ''Variables de entorno'' si está desactivada.
public class KeyValuePair {
String key
String value
}
...
KeyValuePair[] environmentVariables = [...]
...
import hudson.slaves.EnvironmentVariablesNodeProperty
Jenkins jenkins = Jenkins.instance
List<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()