J'exécute Jenkins à partir de l'utilisateur jenkins
qui a $PATH
défini sur quelque chose et lorsque je vais dans l'interface Web Jenkins, dans Propriétés système window (http://$Host/systemInfo
), je vois un $PATH
différent.
J'ai installé Jenkins sur Centos avec le site natif de Jenkins. J'utilise le script de démarrage fourni avec l'installation à l'aide de Sudo /etc/init.d/jenkins start
Quelqu'un peut-il m'expliquer s'il vous plaît pourquoi cela se produit?
Michael,
Deux choses:
Lorsque Jenkins se connecte à un ordinateur, il passe dans le shell sh
et non pas le shell bash
(du moins, c'est ce que j'ai remarqué - je peux me tromper). Ainsi, les modifications que vous apportez à $ PATH dans votre fichier bashrc ne sont pas prises en compte.
En outre, toutes les modifications que vous apportez à $ PATH dans votre shell local (celui dans lequel vous êtes personnellement introduit) n'apparaîtront pas dans Jenkins.
Pour changer le chemin utilisé par Jenkins, vous avez deux options (autant que je sache):
1) Editez votre fichier /etc/profile
et ajoutez les chemins que vous voulez y
2) Accédez à la page de configuration de votre esclave et ajoutez la variable d'environnement PATH
, avec la valeur: $PATH:/followed-by/paths/you/want/to/add
Si vous utilisez la deuxième option, vos informations système ne seront toujours pas affichées, mais vos versions verront les chemins ajoutés.
J'ai continué à rencontrer ce problème, mais maintenant je viens d'ajouter:
source /etc/profile
En tant que première étape de mon processus de construction. Maintenant, toutes mes règles suivantes sont chargées pour que Jenkins puisse fonctionner correctement.
Vous pouvez également éditer le fichier /etc/sysconfig/jenkins
pour apporter des modifications aux variables d'environnement, etc. J'ai simplement ajouté source /etc/profile
à la fin du fichier. /etc/profile
a toutes les variables PATH
appropriées. Lorsque vous faites cela, assurez-vous de redémarrer Jenkins
/etc/init.d/jenkins restart
Nous utilisons ZendServer CE, qui installe pear, phing, etc. dans un chemin différent, ce qui nous a été utile. De plus, nous n'obtenons pas les erreurs LD_LIBRARY_PATH
que nous obtenions auparavant avec le client Oracle et Jenkins.
J'ai essayé /etc/profile
, ~/.profile
et ~/.bash_profile
et aucun de ceux qui ont fonctionné. J'ai trouvé l'édition ~/.bashrc
pour le compte esclave Jenkins.
Les informations sur cette réponse sont obsolètes. Vous devez aller dans Configurer Jenkins>. Vous pouvez ensuite cliquer pour ajouter une paire clé de valeur de variable d’environnement à partir de là.
exemple: export MYVAR=test
serait MYVAR
est la clé et test
est la valeur.
Sur ma nouvelle instance EC2, ajouter simplement la nouvelle valeur au chemin d'accès du fichier .profile de l'utilisateur Jenkins, puis redémarrer Tomcat a fonctionné pour moi.
Sur une instance plus ancienne où la configuration est différente, utiliser # 2 dans la réponse de Sagar était la seule chose qui fonctionnait (c'est-à-dire .profile, .bash * ne fonctionnait pas).
Ne pourriez-vous pas simplement l'ajouter en tant que variable d'environnement dans les paramètres Jenkins:
Gérer Jenkins -> Propriétés globales> Variables d’environnement: .__ Et cliquez ensuite sur "Ajouter" pour ajouter une propriété PATH et sa valeur à vos besoins.
J'ai trouvé deux plugins pour cela . L'un charge les valeurs d'un fichier et l'autre vous permet de configurer les valeurs dans l'écran de configuration du travail.
Plugin Envfile - Ce plugin vous permet de définir des variables d'environnement via un fichier. Le format du fichier doit être le format de fichier de propriétés Java standard.
Plugin EnvInject - Ce plugin permet d'ajouter des variables d'environnement et d'exécuter un script de configuration afin de configurer un environnement pour le Job.
Voici comment j'ai résolu ce problème ennuyeux:
J'ai changé la variable PATH
comme l'a suggéré @sagar dans sa deuxième option, mais j'ai quand même eu une valeur PATH
différente de celle à laquelle je m'attendais.
Finalement, j'ai découvert que c'était le plugin EnvInject
qui remplaçait ma variable PATH
!
Je pourrais donc désinstaller EnvInject
ou simplement l’utiliser pour injecter la variable PATH.
Comme beaucoup de nos travaux Jenkins utilisent ce plugin, je ne voulais pas le désinstaller ...
J'ai donc créé un fichier: environment_variables.properties
sous mon répertoire personnel Jenkins.
Ce fichier contenait la valeur de l’environnement du chemin dont j’avais besoin: PATH=$PATH:/usr/local/git/bin/
.
À partir de l'interface Web Jenkins: Manage Jenkins -> Configure System
. Dans cet écran, j'ai coché l'option Prepare jobs environment
et, dans le champ Properties File Path
, le chemin de mon fichier: /var/lib/jenkins/environment_variables.properties
.
Ainsi, chaque travail Jenkins que nous avons reçoit toutes les variables que je mets dans ce fichier environment_variables.properties
.
Je n'ai eu des progrès sur cette question qu'après "/etc/init.d/jenkins force-reload". Je recommande d'essayer cela avant toute chose, et de l'utiliser plutôt que de redémarrer.
Jenkins prend également en charge le format PATH+<name>
pour ajouter une variable à une variable, pas seulement PATH:
Variables d'environnement global ou noeud Variables d'environnement:
Ceci est également pris en charge dans l’étape de pipeline withEnv
:
node {
withEnv(['PATH+Java=/path/to/Java/bin']) {
...
}
}
Il suffit de prendre note, il prédomine à la variable. Si cela doit être ajouté, vous devez faire ce que les autres réponses montrent.
Voir le document sur les étapes du pipeline ici .
Vous pouvez également utiliser la syntaxe PATH + WHATEVER =/quelque chose à ajouter/quelque chose à $ PATH
Ou la documentation Java sur EnvVars ici .
Sur mon Ubuntu 13.04, j’ai essayé quelques petites modifications avant de réussir:
export PATH = $ PATH:/some/new/path/bin
Ajouter
/usr/bin/bash
à
Jenkins -> Manage Jenkins -> configure System -> Shell-> Shell exécutable
Jenkins utilise le sh pour que même/etc/profile ne fonctionne pas pour moi Quand j'ajoute cela, j'ai tout l'env.
source ~/.bashrc
J'ai d'abord vérifié que Jenkins utilisait BASH, avec echo $Shell
et echo $BASH
(remarque: je place explicitement #!/bin/bash
au sommet de la zone de texte de Jenkins, je ne suis pas sûr que ce soit nécessaire pour obtenir BASH). source
ing /etc/profile
comme d'autres l'ont suggéré ne fonctionnait pas.
En regardant /etc/profile
j'ai trouvé
if [ "$PS1" ]; then
...
et inspectant "$ PS1" le trouva null. J'ai essayé d'usurper $PS1
en vain comme
export PS1=1
bash -c 'echo $PATH'
cependant, cela n'a pas produit le résultat souhaité (ajoutez le reste du $PATH
que je m'attends à voir). Mais si je dis à bash d'être interactif
export PS1=1
bash -ci 'echo $PATH'
le $PATH
a été modifié comme prévu.
J'essayais de comprendre comment usurper correctement un shell interactif pour obtenir le chargement de /etc/bash.bashrc
. Cependant, il s'avère que tout ce dont j'avais besoin était dans ~/.bashrc
, si simplement source
ing résolvait le problème.
J'ai essayé toutes les choses d'en haut - cela n'a pas fonctionné pour moi.
J'ai trouvé deux solutions (les deux pour SSH-Slave)
Aller aux réglages de l'esclave
Ajouter une nouvelle variable d'environnement
La partie "$ {HOME}" est importante. Cela rend le chemin supplémentaire absolu . Le chemin relatif ne fonctionnait pas pour moi.
Option II (script de pipeline)
pipeline {
agent {
label 'your-slave'
}
environment {
PATH = "/home/jenkins/.pub-cache/bin:$PATH"
}
stages {
stage('Test') {
steps {
ansiColor('xterm') {
echo "PATH is: $PATH"
}
}
}
}
}
Jenkins 1.639 est installé sur SLES 11 SP3 via zypper (le gestionnaire de paquets) . L'installation a configuré jenkins en tant que service
# service jenkins
Usage: /etc/init.d/jenkins {start|stop|status|try-restart|restart|force-reload|reload|probe}
Bien que /etc/init.d/jenkins
sources /etc/sysconfig/jenkins
, les variables env. Définies ici ne sont pas héritées par le processus jenkins car il est démarré dans un shell de connexion séparé avec un nouvel environnement comme celui-ci:
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 façon dont j'ai réussi à définir env vars pour le processus jenkins est via .bashrc
dans son répertoire personnel - /var/lib/jenkins
. Je devais créer /var/lib/jenkins/.bashrc
car il n'existait pas auparavant.
L'exécution de la commande avec la variable d'environnement définie est également efficace. Bien sûr, vous devez le faire pour chaque commande que vous exécutez, mais vous avez probablement un script de travail, vous n'avez donc probablement qu'une commande par construction. Mon script de travail est un script python qui utilise l'environnement pour décider du python à utiliser. Il me restait donc à mettre /usr/local/bin/python2.7 dans son chemin:
PATH=/usr/local/bin <my-command>
Sur Ubuntu, je viens de modifier/etc/default/jenkins et d’ajouter le fichier source/etc/profile à la fin, ce qui fonctionne pour moi.
Ce qui a fonctionné pour moi a été de surcharger l'environnement PATH pour l'esclave.
Set: PATH
To: $PATH:/usr/local/bin
Ensuite, déconnectez et reconnectez l'esclave.
En dépit de ce que les informations système montraient, cela fonctionnait.