102 votes

Variables d'environnement Jenkins / Hudson

J'exécute Jenkins depuis l'utilisateur jenkins qui a $PATH et quand j'entre dans l'interface web de Jenkins, dans la section Propriétés du système fenêtre ( http://$host/systemInfo ) Je vois une autre $PATH .

J'ai installé Jenkins sur Centos avec le rpm natif du site de Jenkins. J'utilise le script de démarrage fourni avec l'installation en utilisant sudo /etc/init.d/jenkins start

Quelqu'un peut-il m'expliquer pourquoi cela se produit ?

1 votes

Si vous vous connectez en tant que jenkins, et echo $PATH Est-ce que ça correspond à ce que vous voyez dans Jenkins ?

3 votes

@Dave non, ça ne correspond pas. Je ne comprends pas pourquoi.

8 votes

La raison pour laquelle il ne correspond pas est que lorsque vous vous connectez en tant qu'utilisateur jenkins, vous invoquez un shell de connexion, alors que jenkins exécute simplement /bin/sh -xe {votre script} et ne passe donc pas par le même ensemble de scripts qui modifient la variable d'environnement PATH. En fait, l'ensemble des scripts varie en fonction de la saveur particulière de *nix et/ou du shell que vous avez installé. J'ai testé sur AWS Linux AMI avec jenkins et malheureusement aucun des /etc/profile /etc/profile.d/xxx.sh /etc/bashrc /etc/environment ~/.bash_profile ~/.profile ~/.bashrc n'a pu affecter le PATH passé à /bin/sh.

145voto

Sagar Points 4883

Michael,

Deux choses :

Lorsque Jenkins se connecte à un ordinateur, il se rend dans la section sh et non le bash (du moins, c'est ce que j'ai remarqué - je peux me tromper). Ainsi, toute modification apportée à $PATH dans votre fichier bashrc n'est pas prise en compte.

En outre, les modifications apportées à $PATH dans votre shell local (celui dans lequel vous vous connectez personnellement) n'apparaîtront pas dans Jenkins.

Pour changer le chemin que Jenkins utilise, vous avez deux options (AFAIK) :

1) Modifiez votre /etc/profile et ajoutez-y les chemins que vous voulez

2) Allez à la page de configuration de votre esclave, et ajoutez la variable d'environnement PATH avec de la valeur : $PATH:/followed-by/paths/you/want/to/add

Si vous utilisez la deuxième option, vos informations système ne l'afficheront toujours pas, mais vos constructions verront les chemins ajoutés.

2 votes

Cette réponse a fonctionné pour moi, mais j'ai remarqué que Jenkins est très sensible à ce que vous écrivez dans la page de configuration. Je n'ai pas réussi à le faire fonctionner avec des chemins contenant des espaces.

0 votes

Oui, mais lorsque vous entrez des chemins avec des espaces dans un shell UNIX, l'espace est normalement échappé par un caractère ``. Par conséquent, si votre chemin est "/opt/bin/Mon nom de dossier", vous pouvez essayer "/opt/bin/Mon nom de dossier" à la place. Cela permettra d'échapper aux espaces et de les utiliser.

11 votes

La solution 2 est la meilleure.

36voto

bryan kennedy Points 1666

J'ai continué à rencontrer ce problème, mais maintenant j'ajoute simplement :

source /etc/profile

Comme première étape de mon processus de construction. Maintenant toutes mes règles ultérieures sont chargées pour que Jenkins fonctionne sans problème.

6 votes

Hein ? En détail, s'il vous plaît... vous ajoutez où ? comment ? quand ? Est-ce que ça fonctionne sous Windows ?

0 votes

Je suppose que vous exécutez une commande shell dans le cadre de votre construction. Mettez source /etc/profile comme première commande dans la zone de texte Build > Execute Shell > Command.

2 votes

Cela fonctionne sur Mac, et j'ai également trouvé des chemins tels que /usr/local/bin est spécifié dans /etc/paths y /etc/paths est utilisé par /usr/libexec/path_helper et path_helper est exécuté dans /etc/profile .

25voto

dbiehl Points 81

Vous pouvez également modifier le /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 tout ce qu'il faut PATH la configuration des variables. 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, donc cela a été utile. De plus, nous n'obtenons pas le LD_LIBRARY_PATH erreurs que nous avions l'habitude d'avoir avec le client Oracle et Jenkins.

0 votes

C'est un commentaire clé, ou redémarrer jenkins à partir de {jenkins-url}/restart ou {jenkins-url}/safeRestart . Je me demandais pourquoi les changements de chemin n'étaient pas pris en compte, même en modifiant le fichier /etc/environnement sur l'hôte ubuntu - RESTART résoudra le problème, comme le vérifie {jenkins-url}/systemInfo.

1 votes

Tous les autres ont échoué, c'est le seul qui a fonctionné ! J'aurais aimé qu'il soit plus répandu pour que je ne perde pas ces dernières heures !

15voto

user1172832 Points 23

J'ai essayé /etc/profile , ~/.profile y ~/.bash_profile et aucune d'entre elles n'a fonctionné. J'ai découvert que l'édition ~/.bashrc pour le compte de l'esclave Jenkins a fait.

4 votes

C'est parce que le shell non-login ne lit ni l'un ni l'autre /etc/profile ni ~/.profile

9voto

TJ Biddle Points 584

Les informations contenues dans cette réponse ne sont pas à jour. Vous devez aller dans Configurer Jenkins > Et vous pouvez ensuite cliquer pour ajouter une paire clé-valeur de variable d'environnement à partir de là.

eg : export MYVAR=test serait MYVAR est la clé, et test est la valeur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X