Ich jenkins
führe Jenkins von einem Benutzer aus $PATH
, der auf etwas eingestellt ist, und wenn ich in die Jenkins-Weboberfläche gehe, sehe ich im Fenster Systemeigenschaften ( http://$host/systemInfo
) einen anderen $PATH
.
Ich habe Jenkins auf Centos mit der nativen Drehzahl von der Jenkins-Website installiert. Ich verwende das mit der Installation gelieferte Startskript mitsudo /etc/init.d/jenkins start
Kann mir bitte jemand erklären, warum das passiert?
jenkins
environment-variables
hudson
Michael
quelle
quelle
echo $PATH
, stimmt es mit dem überein, was Sie in Jenkins sehen?Antworten:
Michael,
Zwei Dinge:
Wenn Jenkins eine Verbindung zu einem Computer herstellt, geht es zur
sh
Shell und nicht zurbash
Shell (zumindest ist mir dies aufgefallen - ich kann mich irren). Änderungen, die Sie an $ PATH in Ihrer bashrc-Datei vornehmen, werden daher nicht berücksichtigt.Änderungen, die Sie an $ PATH in Ihrer lokalen Shell vornehmen (eine, in die Sie persönlich ssh), werden in Jenkins nicht angezeigt.
Um den von Jenkins verwendeten Pfad zu ändern, haben Sie zwei Möglichkeiten (AFAIK):
1) Bearbeiten Sie Ihre
/etc/profile
Datei und fügen Sie dort die gewünschten Pfade hinzu2) Gehen Sie zur Konfigurationsseite Ihres Slaves und fügen Sie eine Umgebungsvariable
PATH
mit dem Wert hinzu:$PATH:/followed-by/paths/you/want/to/add
Wenn Sie die zweite Option verwenden, werden sie in Ihren Systeminformationen immer noch nicht angezeigt, in Ihren Builds werden jedoch die hinzugefügten Pfade angezeigt.
quelle
Ich bin immer wieder auf dieses Problem gestoßen, aber jetzt füge ich hinzu:
Als erster Schritt in meinem Build-Prozess. Jetzt werden alle meine nachfolgenden Regeln geladen, damit Jenkins reibungslos funktioniert.
quelle
source /etc/profile
als ersten Befehl in den Textbereich Build> Shell ausführen> Befehl ein./usr/local/bin
in angegeben/etc/paths
sind und von/etc/paths
verwendet werden/usr/libexec/path_helper
, und path_helper wird in ausgeführt/etc/profile
.Sie können die
/etc/sysconfig/jenkins
Datei auch bearbeiten , um Änderungen an den Umgebungsvariablen usw. vorzunehmen. Ich habe sie einfachsource /etc/profile
am Ende der Datei hinzugefügt ./etc/profile
hat alle richtigenPATH
Variablen eingerichtet. Stellen Sie dabei sicher, dass Sie Jenkins neu startenWir führen ZendServer CE aus, das Birne, Phing usw. auf einem anderen Pfad installiert. Dies war also hilfreich. Außerdem erhalten wir nicht die
LD_LIBRARY_PATH
Fehler, die wir mit Oracle-Client und Jenkins verwendet haben.quelle
Ich habe versucht
/etc/profile
,~/.profile
und ,~/.bash_profile
und keiner von denen gearbeitet. Ich fand, dass die Bearbeitung~/.bashrc
für das Jenkins-Sklavenkonto funktioniert hat.quelle
/etc/profile
noch liest~/.profile
Die Informationen zu dieser Antwort sind veraltet. Sie müssen zu Jenkins konfigurieren> gehen und dann klicken, um von dort aus ein Schlüssel-Wert-Paar für Umgebungsvariablen hinzuzufügen.
zB:
export MYVAR=test
wäreMYVAR
der Schlüssel undtest
der Wert.quelle
In meiner neueren EC2-Instanz hat es für mich funktioniert, einfach den neuen Wert zum PATH-Pfad des Jenkins-Benutzers hinzuzufügen und dann Tomcat neu zu starten.
In einer älteren Instanz, in der sich die Konfiguration unterscheidet, funktionierte nur die Verwendung von # 2 aus Sagars Antwort (dh .profile, .bash * funktionierte nicht).
quelle
Ich habe zwei Plugins dafür gefunden. Einer lädt die Werte aus einer Datei und der andere ermöglicht es Ihnen, die Werte im Jobkonfigurationsbildschirm zu konfigurieren.
Envfile Plugin - Mit diesem Plugin können Sie Umgebungsvariablen über eine Datei festlegen. Das Dateiformat muss das Standard-Java-Eigenschaftendateiformat sein.
EnvInject Plugin - Mit diesem Plugin können Umgebungsvariablen hinzugefügt und ein Setup-Skript ausgeführt werden, um eine Umgebung für den Job einzurichten.
quelle
Könnten Sie es nicht einfach als Umgebungsvariable in den Jenkins-Einstellungen hinzufügen:
Jenkins verwalten -> Globale Eigenschaften> Umgebungsvariablen: Klicken Sie anschließend auf "Hinzufügen", um einen Eigenschaftspfad und dessen Wert zu Ihren Anforderungen hinzuzufügen.
quelle
So habe ich dieses nervige Problem gelöst:
Ich habe die
PATH
Variable geändert , wie @sagar in seiner zweiten Option vorgeschlagen hat, aber trotzdem habe ich einen anderenPATH
Wert als erwartet.Schließlich fand ich heraus, dass es das
EnvInject
Plugin war, das meinePATH
Variable ersetzte !Ich könnte es also entweder deinstallieren
EnvInject
oder einfach zum Einfügen der PATH-Variablen verwenden.Da viele unserer Jenkins-Jobs dieses Plugin verwenden, wollte ich es nicht deinstallieren ...
Also habe ich eine Datei erstellt:
environment_variables.properties
unter meinem Jenkins-Ausgangsverzeichnis.Diese Datei enthielt den Pfadumgebungswert, den ich brauchte :
PATH=$PATH:/usr/local/git/bin/
.Über die Jenkins-Weboberfläche :
Manage Jenkins -> Configure System
. In diesem Bildschirm habe ich diePrepare jobs environment
Option angekreuzt und in dasProperties File Path
Feld den Pfad zu meiner Datei eingegeben :/var/lib/jenkins/environment_variables.properties
.Auf diese Weise erhalten wir bei jedem Jenkins-Job alle Variablen, die ich in diese
environment_variables.properties
Datei eingefügt habe.quelle
Jenkins unterstützt auch das Format
PATH+<name>
, um jeder Variablen vorangestellt zu werden, nicht nur PATH:Globale Umgebungsvariablen oder Knoten Umgebungsvariablen:
Dies wird auch im Pipeline-Schritt unterstützt
withEnv
:Beachten Sie einfach, dass es der Variablen vorangestellt wird. Wenn es angehängt werden muss, müssen Sie tun, was die anderen Antworten zeigen.
Siehe das Dokument mit den Pipeline-Schritten hier .
Oder die Java-Dokumente auf EnvVars hier .
quelle
Ich hatte erst nach einem "/etc/init.d/jenkins Force-Reload" Fortschritte in diesem Bereich. Ich empfehle, dies vor allem anderen zu versuchen und es zu verwenden, anstatt es neu zu starten.
quelle
Auf meinem Ubuntu 13.04 habe ich einige Optimierungen versucht, bevor ich damit Erfolg hatte:
quelle
Hinzufügen
beim
Jenkins verwendet das sh, damit selbst / etc / profile bei mir nicht funktioniert. Wenn ich das hinzufüge, habe ich die gesamte Umgebung.
quelle
Lösung, die für mich funktioniert hat
source ~/.bashrc
Erläuterung
Ich habe zuerst überprüft, ob Jenkins BASH mit
echo $SHELL
und ausführtecho $BASH
(ich stelle nicht explizit fest,#!/bin/bash
ob dies eine Voraussetzung ist, um BASH zu erhalten).source
ing/etc/profile
als andere vorgeschlagen funktionierte nicht.Beim Anschauen
/etc/profile
fand ichund Inspektion von "$ PS1" fand es null. Ich habe versucht
$PS1
, so vergeblich zu fälschenDies führte jedoch nicht zum gewünschten Ergebnis (fügen Sie den Rest der
$PATH
erwarteten Ergebnisse hinzu ). Aber wenn ich bash sage, dass es interaktiv sein sollDas
$PATH
wurde wie erwartet geändert.Ich habe versucht herauszufinden, wie man eine interaktive Shell richtig fälscht, um
/etc/bash.bashrc
zum Laden zu gelangen , aber es stellte sich heraus, dass alles, was ich brauchte, unten war~/.bashrc
, alsosource
löste es einfach das Problem.quelle
#!/bin/bash -el
Sie bash anweisen, als Login-Shell zu starten. Das sollte Bash veranlassen, die notwendigen .rc-Dateien zu beschaffenIch habe alles von oben ausprobiert - hat bei mir nicht funktioniert.
Ich habe zwei Lösungen gefunden (beide für SSH-Slave)
Gehen Sie zu den Slave-Einstellungen
Fügen Sie eine neue Umgebungsvariable hinzu
Der Teil "$ {HOME}" ist wichtig. Dies macht den zusätzlichen Pfad absolut. Der relative Pfad hat bei mir nicht funktioniert.
Option II (Pipeline-Skript)
quelle
Unter Ubuntu bearbeite ich einfach / etc / default / jenkins und füge am Ende die Quelle / etc / profile hinzu, und es funktioniert für mich.
quelle
Das Ausführen des Befehls mit gesetztem Umgebungsvariablen ist ebenfalls effektiv. Natürlich müssen Sie dies für jeden Befehl tun, den Sie ausführen, aber Sie haben wahrscheinlich ein Jobskript, sodass Sie wahrscheinlich nur einen Befehl pro Build haben. Mein Jobskript ist ein Python-Skript, das anhand der Umgebung entscheidet, welches Python verwendet werden soll. Daher musste ich /usr/local/bin/python2.7 noch in seinen Pfad einfügen:
quelle
Was für mich funktionierte, war das Überschreiben der PATH-Umgebung für den Sklaven.
Trennen Sie dann den Slave und schließen Sie ihn wieder an.
Ungeachtet dessen, was die Systeminformationen zeigten, funktionierte es.
quelle
Ich habe Jenkins 1.639 über zypper (den Paketmanager) auf SLES 11 SP3 installiert. Installation konfiguriert Jenkins als Service
Obwohl es sich um
/etc/init.d/jenkins
Quellen handelt/etc/sysconfig/jenkins
, werden dort festgelegte env-Variablen nicht vom Jenkins-Prozess geerbt, da sie in einer separaten Anmeldeshell mit einer neuen Umgebung wie der folgenden gestartet werden:Die Art und Weise, wie ich env vars für den jenkins-Prozess festlegen konnte, erfolgt über
.bashrc
das Home-Verzeichnis -/var/lib/jenkins
. Ich musste schaffen,/var/lib/jenkins/.bashrc
wie es vorher nicht existierte.quelle
Hier ist, was ich auf Ubuntu 18.04 LTS mit Jenkins 2.176.2 gemacht habe
Ich habe die Datei .bash_aliases erstellt und dort Pfad, Proxy-Variablen usw. hinzugefügt.
Zu Beginn von .bashrc wurde dies definiert.
Es wird also überprüft, ob wir hier nichts tun, wenn wir eine nicht interaktive Shell starten.
Am unteren Rand der .bashrc befand sich include für .bash_aliases
Also habe ich .bash_aliases verschoben und zuerst bei .bashrc direkt über der nicht interaktiven Prüfung geladen.
Dies hat zuerst nicht funktioniert, aber dann habe ich den Slave getrennt und wieder verbunden, damit die Variablen wieder geladen werden. Sie müssen nicht ganze Jenkins neu starten, wenn Sie Slave-Variablen ändern. Einfach trennen und wieder verbinden.
quelle
1- Fügen Sie Ihrer Profildatei die Datei ".bash_profile" hinzu
Es befindet sich im Ordner "/ home / your_user /"
vi .bash_profile
hinzufügen:
==> es ist der e jenkins Arbeitsbereich
2- Wenn Sie einen Steg verwenden: Gehen Sie zur Datei jenkins.xml
und hinzufügen:
quelle