built - Variables de entorno Jenkins/Hudson
jenkins set env vars (19)
Estoy ejecutando Jenkins del usuario jenkins
que tiene $PATH
configurado para algo y cuando entro en la interfaz web de Jenkins, en la ventana Propiedades del sistema ( http://$host/systemInfo
) veo una $PATH
diferente.
He instalado Jenkins en Centos con las rpm nativas del sitio web de Jenkins. Estoy usando el script de inicio provisto con la instalación usando sudo /etc/init.d/jenkins start
¿Alguien puede explicarme por qué sucede eso?
Solución que funcionó para mí
source ~/.bashrc
Explicación
Primero verifiqué que Jenkins estaba ejecutando BASH, con echo $SHELL
y echo $BASH
(nótese que estoy poniendo explícitamente #!/bin/bash
sobre el área de texto en Jenkins, no estoy seguro de si ese es un requisito para obtener BASH). source
ing /etc/profile
como otros sugirieron que no estaba funcionando.
Mirando /etc/profile
encontré
if [ "$PS1" ]; then
...
e inspeccionando "$ PS1" lo encontró nulo. Probé spoofing $PS1
inútilmente como tal
export PS1=1
bash -c ''echo $PATH''
sin embargo, esto no produjo el resultado deseado (agregue el resto del $PATH
que espero ver). Pero si cuento bash para ser interactivo
export PS1=1
bash -ci ''echo $PATH''
el $PATH
fue alterado como esperaba.
Estaba intentando descubrir cómo falsificar correctamente un intérprete interactivo para que /etc/bash.bashrc
cargue, pero resulta que todo lo que necesitaba estaba en ~/.bashrc
, por lo que simplemente resolverlo solucionó el problema.
¿No podría simplemente agregarlo como una variable de entorno en la configuración de Jenkins?
Administre Jenkins -> Propiedades globales> Variables de entorno: y luego haga clic en "Agregar" para agregar una RUTA de la propiedad y su valor a lo que necesita.
1- agrega a tu archivo profil el archivo ".bash_profile"
está en la carpeta "/ home / your_user /"
vi .bash_profile
añadir:
export JENKINS_HOME=/apps/data/jenkins
export PATH=$PATH:$JENKINS_HOME
==> es el espacio de trabajo de e jenkins
2- Si usa embarcadero: vaya al archivo jenkins.xml
y añadir :
<Arg>/apps/data/jenkins</Arg>
Añadir
/usr/bin/bash
a
Jenkins -> Gestiona Jenkins -> configura System -> Shell-> Shell ejecutable
Jenkins usa el sh para que incluso / etc / profile no me funcione Cuando agrego esto, tengo todo el env.
Así es como resolví este problema molesto:
Cambié la variable PATH
como sugirió @sagar en su segunda opción, pero aun así obtuve un valor de PATH
diferente del que esperaba.
¡Eventualmente descubrí que era el plugin EnvInject
que reemplazó mi variable PATH
!
Así que podría desinstalar EnvInject
o simplemente usarlo para inyectar la variable PATH.
Como muchos de nuestros trabajos en Jenkins usan ese complemento, no quise desinstalarlo ...
Así que creé un archivo: environment_variables.properties
en mi directorio de inicio de Jenkins.
Este archivo contenía el valor del entorno de ruta que necesitaba: PATH=$PATH:/usr/local/git/bin/
.
Desde la interfaz web de Jenkins: Manage Jenkins -> Configure System
. En esa pantalla, marqué la opción Prepare jobs environment
y, en el campo Properties File Path
acceso a los archivos, /var/lib/jenkins/environment_variables.properties
la ruta a mi archivo: /var/lib/jenkins/environment_variables.properties
.
De esta forma, cada trabajo de Jenkins recibimos las variables que incluyo en este archivo environment_variables.properties
.
Ejecutar el comando con la variable de entorno establecida también es efectivo. Por supuesto, debe hacerlo por cada comando que ejecute, pero probablemente tenga un script de trabajo, por lo que probablemente solo tenga un comando por compilación. Mi script de trabajo es una secuencia de comandos python que usa el entorno para decidir qué python usar, por lo que aún necesito poner /usr/local/bin/python2.7 en su ruta:
PATH=/usr/local/bin <my-command>
En Ubuntu solo edito / etc / default / jenkins y agrego source / etc / profile al final y me funciona.
En mi Ubuntu 13.04, intenté algunos ajustes antes de tener éxito con esto:
- Editar /etc/init/jenkins.conf
- Ubique el lugar donde comienza "start-stop-server ... exec"
- Inserte la actualización del entorno justo antes de eso, es decir,
PATH de exportación = $ PATH: / some / new / path / bin
En mi nueva instancia de EC2, simplemente agregar el nuevo valor a la RUTA de .profile del usuario de Jenkins y luego reiniciar tomcat funcionó para mí.
En una instancia anterior donde la configuración es diferente, usar el # 2 de la respuesta de Sagar fue lo único que funcionó (es decir, .profile, .bash * no funcionó).
Encontré dos complementos para eso. Uno carga los valores de un archivo y el otro le permite configurar los valores en la pantalla de configuración del trabajo.
Plugin de Envfile : este complemento le permite establecer variables de entorno a través de un archivo. El formato del archivo debe ser el formato de archivo de propiedad estándar de Java.
Complemento de EnvInject : este complemento permite agregar variables de entorno y ejecutar un script de configuración para configurar un entorno para el trabajo.
Intenté /etc/profile
, ~/.profile
y ~/.bash_profile
y ninguno funcionó. Descubrí que la edición ~/.bashrc
para la cuenta esclava Jenkins sí.
La información sobre esta respuesta está desactualizada. Debe ir a Configurar Jenkins> y luego puede hacer clic para agregar un par clave-valor de variable de entorno desde allí.
por ejemplo: export MYVAR=test
sería MYVAR
es la clave, y la test
es el valor.
Lo que funcionó para mí fue anular el entorno PATH para el esclavo.
Set: PATH
To: $PATH:/usr/local/bin
Luego desconectando y reconectando el esclavo.
A pesar de lo que la información del sistema estaba mostrando, funcionó.
Miguel,
Dos cosas:
Cuando Jenkins se conecta a una computadora, va a la concha sh
, y no a la concha bash
(al menos esto es lo que noté, es posible que esté equivocado). Por lo tanto, no se tienen en cuenta los cambios que realice en $ PATH en su archivo bashrc.
Además, cualquier cambio que realice en $ PATH en su shell local (uno al que usted personalmente ingrese) no se mostrará en Jenkins.
Para cambiar el camino que utiliza Jenkins, tiene dos opciones (AFAIK):
1) Edite su /etc/profile
y agregue las rutas que desee allí
2) Vaya a la página de configuración de su esclavo, y agregue la variable de entorno PATH
, con el valor: $PATH:/followed-by/paths/you/want/to/add
Si usa la segunda opción, su Información del sistema aún no la mostrará, pero sus compilaciones verán las rutas adicionales.
Probé todas las cosas desde arriba, no funcionó para mí.
Encontré dos soluciones (ambas para SSH-Slave)
Ir a la configuración del esclavo
Agregue una nueva variable de entorno
- CAMINO
- $ {PATH}: $ {HOME} /. Pub-cache / bin: $ {HOME} /. Local / bin
La parte "$ {HOME}" es importante. Esto hace que la RUTA adicional sea absoluta. La ruta relativa no funcionó para mí.
Opción II (secuencia de comandos script)
pipeline {
agent {
label ''your-slave''
}
environment {
PATH = "/home/jenkins/.pub-cache/bin:$PATH"
}
stages {
stage(''Test'') {
steps {
ansiColor(''xterm'') {
echo "PATH is: $PATH"
}
}
}
}
}
Seguí encontrando este problema, pero ahora solo agrego:
source /etc/profile
Como el primer paso en mi proceso de construcción. Ahora todas mis reglas posteriores están cargadas para que Jenkins funcione sin problemas.
Solo tuve progreso en este tema después de un "/etc/init.d/jenkins force-reload". Recomiendo probar eso antes que cualquier otra cosa, y usar eso en lugar de reiniciar.
También puede editar el /etc/sysconfig/jenkins
para realizar cambios en las variables de entorno, etc. Simplemente agregué source /etc/profile
al final del archivo. /etc/profile
tiene todas las configuraciones de PATH
correctas. Cuando hagas esto, asegúrate de reiniciar Jenkins
/etc/init.d/jenkins restart
Estamos ejecutando ZendServer CE, que instala pear, phing, etc. en una ruta diferente, así que esto fue útil. Además, no obtenemos los errores LD_LIBRARY_PATH
que solíamos obtener con el cliente de Oracle y Jenkins.
Tengo instalado Jenkins 1.639 en SLES 11 SP3 a través de zypper (el administrador de paquetes). La instalación configuró jenkins como un servicio
# service jenkins
Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
Aunque /etc/init.d/jenkins
sources /etc/sysconfig/jenkins
, el proceso jenkins no hereda ninguna variable de env establecida aquí porque se inicia en un shell de inicio de sesión separado con un entorno nuevo como este:
startproc -n 0 -s -e -l /var/log/jenkins.rc -p /var/run/jenkins.pid -t 1 /bin/su -l -s /bin/bash -c ''/usr/java/default/bin/java -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --javaHome=/usr/java/default --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080 --ajp13Port=8009 --debug=9 --handlerCountMax=100 --handlerCountMaxIdle=20 &'' jenkins
La forma en que logré establecer los archivos para el proceso de jenkins es a través de .bashrc
en su directorio de inicio - /var/lib/jenkins
. Tuve que crear /var/lib/jenkins/.bashrc
ya que no existía antes.