Uruchamiam Jenkins od użytkownika jenkins
, który $PATH
ustawił coś, a kiedy wchodzę do interfejsu internetowego Jenkinsa, w oknie Właściwości systemu ( http://$host/systemInfo
) widzę inny $PATH
.
Zainstalowałem Jenkins na Centos z natywnym rpm z witryny Jenkins. Używam skryptu startowego dostarczonego z instalacją przy użyciusudo /etc/init.d/jenkins start
Czy ktoś może mi wyjaśnić, dlaczego tak się dzieje?
jenkins
environment-variables
hudson
Michael
źródło
źródło
echo $PATH
czy zgadza się to z tym, co widzisz w jenkins?Odpowiedzi:
Michael,
Dwie rzeczy:
Kiedy Jenkins łączy się z komputerem, trafia do
sh
powłoki, a niebash
powłoki (przynajmniej tak zauważyłem - mogę się mylić). Dlatego wszelkie zmiany wprowadzone w $ PATH w pliku bashrc nie są brane pod uwagę.Ponadto, wszelkie zmiany, które wprowadzisz w $ PATH w swojej lokalnej powłoce (takiej, do której osobiście korzystasz z ssh) nie pojawią się w Jenkinsie.
Aby zmienić ścieżkę używaną przez Jenkins, masz dwie opcje (AFAIK):
1) Edytuj
/etc/profile
plik i dodaj żądane ścieżki2) Przejdź do strony konfiguracji swojego slave'a i dodaj zmienną środowiskową
PATH
o wartości:$PATH:/followed-by/paths/you/want/to/add
Jeśli użyjesz drugiej opcji, Twoje Informacje o systemie nadal nie będą jej wyświetlać, ale Twoje kompilacje będą widzieć dodane ścieżki.
źródło
Ciągle napotykałem ten problem, ale teraz po prostu dodaję:
Jako pierwszy krok w procesie tworzenia. Teraz wszystkie moje kolejne reguły są załadowane, aby Jenkins działał płynnie.
źródło
source /etc/profile
jako pierwsze polecenie w tym obszarze Build> Execute Shell> Command textarea./usr/local/bin
są określone w/etc/paths
i/etc/paths
są używane przez/usr/libexec/path_helper
, a path_helper jest wykonywany w/etc/profile
.Możesz także edytować
/etc/sysconfig/jenkins
plik, aby wprowadzić zmiany w zmiennych środowiskowych, itp. Po prostu dodałemsource /etc/profile
na końcu pliku./etc/profile
ma wszystkie odpowiedniePATH
ustawienia zmiennych. Kiedy to zrobisz, upewnij się, że uruchomiłeś ponownie JenkinsUżywamy ZendServer CE, który instaluje pear, phing itp. W innej ścieżce, więc to było pomocne. Ponadto nie otrzymujemy
LD_LIBRARY_PATH
błędów, które otrzymaliśmy w przypadku klienta Oracle i Jenkins.źródło
Próbowałem
/etc/profile
,~/.profile
i~/.bash_profile
i żaden z tych pracował. Okazało się, że edycja~/.bashrc
konta jenkins slave tak.źródło
/etc/profile
ani~/.profile
Informacje w tej odpowiedzi są nieaktualne. Musisz przejść do Konfiguruj Jenkins> Następnie możesz kliknąć, aby dodać stamtąd parę klucz-wartość zmiennej środowiskowej.
np .:
export MYVAR=test
would beMYVAR
jest kluczem itest
jest wartością.źródło
Na mojej nowszej instancji EC2 po prostu dodanie nowej wartości do PATH użytkownika .profile użytkownika Jenkinsa, a następnie ponowne uruchomienie tomcata działało.
W starszej instancji, gdzie konfiguracja jest inna, użycie numeru 2 z odpowiedzi Sagara było jedyną rzeczą, która działała (tj. .Profile, .bash * nie działało).
źródło
Znalazłem do tego dwie wtyczki. Jeden ładuje wartości z pliku, a drugi umożliwia konfigurację wartości na ekranie konfiguracji zadania.
Wtyczka Envfile - ta wtyczka umożliwia ustawienie zmiennych środowiskowych za pośrednictwem pliku. Format pliku musi być standardowym formatem pliku właściwości Java.
Wtyczka EnvInject - ta wtyczka umożliwia dodawanie zmiennych środowiskowych i wykonywanie skryptu instalacyjnego w celu skonfigurowania środowiska dla zadania.
źródło
Nie mógłbyś po prostu dodać go jako zmiennej środowiskowej w ustawieniach Jenkinsa:
Zarządzaj Jenkins -> Właściwości globalne> Zmienne środowiskowe: a następnie kliknij „Dodaj”, aby dodać ścieżkę właściwości i jej wartość do tego, czego potrzebujesz.
źródło
Oto jak rozwiązałem ten irytujący problem:
Zmieniłem
PATH
zmienną, jak zasugerował @sagar w swojej drugiej opcji, ale nadal otrzymałem innąPATH
wartość niż się spodziewałem.W końcu dowiedziałem się, że to
EnvInject
wtyczka zastąpiła mojąPATH
zmienną!Mogłem więc odinstalować
EnvInject
lub po prostu użyć go do wstrzyknięcia zmiennej PATH.Ponieważ wiele naszych zadań Jenkinsa korzysta z tej wtyczki, nie chciałem jej odinstalowywać ...
Więc utworzyłem plik:
environment_variables.properties
w moim katalogu domowym Jenkins.Ten plik zawierał wartość środowiska ścieżki, której potrzebowałem:
PATH=$PATH:/usr/local/git/bin/
.Z interfejsu WWW Jenkins:
Manage Jenkins -> Configure System
. Na tym ekranie - zaznaczyłemPrepare jobs environment
opcję, awProperties File Path
polu wpisałem ścieżkę do mojego pliku:/var/lib/jenkins/environment_variables.properties
.W ten sposób każde zadanie Jenkinsa, które otrzymujemy, otrzymuje zmienne, które umieściłem w tym
environment_variables.properties
pliku.źródło
Jenkins obsługuje również format
PATH+<name>
dołączania przed każdą zmienną, nie tylko PATH:Globalne zmienne środowiskowe lub węzeł Zmienne środowiskowe:
Jest to również obsługiwane w kroku potoku
withEnv
:Zwróć uwagę, że poprzedza zmienną. Jeśli trzeba go dołączyć, musisz zrobić to, co pokazują inne odpowiedzi.
Zobacz dokument opisujący kroki rurociągu tutaj .
Lub dokumentacja java na EnvVars tutaj .
źródło
Osiągnąłem postęp w tej sprawie dopiero po "/etc/init.d/jenkins force-reload". Zalecam wypróbowanie tego przed czymkolwiek innym i używanie tego zamiast ponownego uruchamiania.
źródło
Na moim Ubuntu 13.04 wypróbowałem kilka poprawek, zanim udało mi się to:
źródło
Dodaj
w
Jenkins używa sh, więc nawet / etc / profile nie działa dla mnie. Kiedy to dodam, mam wszystkie env.
źródło
Rozwiązanie, które zadziałało dla mnie
source ~/.bashrc
Wyjaśnienie
Po raz pierwszy zweryfikowałem, że Jenkins działa w BASH, z
echo $SHELL
iecho $BASH
(uwaga, wyraźnie umieszczam#!/bin/bash
na wierzchu obszaru tekstowego w Jenkinsie, nie jestem pewien, czy jest to wymóg uzyskania BASH).source
ing,/etc/profile
jak sugerowali inni, nie działało.Patrząc na
/etc/profile
znalazłema sprawdzenie „$ PS1” wykazało, że jest pusty. Próbowałem podszywać
$PS1
się bez skutkujednak nie przyniosło to pożądanego rezultatu (dodaj resztę tego,
$PATH
co spodziewam się zobaczyć). Ale jeśli powiem bashowi, aby był interaktywny$PATH
zmieniono tak jak oczekiwano.Próbowałem wymyślić, jak poprawnie sfałszować interaktywną powłokę, aby się
/etc/bash.bashrc
załadować, ale okazało się, że wszystko, czego potrzebowałem, było w dół~/.bashrc
, więc po prostusource
rozwiązałem problem.źródło
#!/bin/bash -el
aby bash uruchomił się jako powłoka logowania. To powinno spowodować, że bash pozyska niezbędne pliki .rcPróbowałem wszystkich rzeczy z góry - nie działały dla mnie.
Znalazłem dwa rozwiązania (oba dla SSH-Slave)
Przejdź do ustawień slave
Dodaj nową zmienną środowiskową
Część „$ {HOME}” jest ważna. To sprawia, że dodatkowa PATH jest absolutna. Względna ścieżka mi nie odpowiada.
Opcja II (pipeline-script)
źródło
W Ubuntu po prostu edytuję / etc / default / jenkins i na końcu dodaję źródło / etc / profile i to działa.
źródło
Skuteczne jest również uruchomienie polecenia z ustawioną zmienną środowiskową. Oczywiście musisz to zrobić dla każdego uruchamianego polecenia, ale prawdopodobnie masz skrypt zadania, więc prawdopodobnie masz tylko jedno polecenie na kompilację. Mój skrypt zadania to skrypt w języku Python, który używa środowiska, aby zdecydować, którego Pythona użyć, więc nadal musiałem umieścić /usr/local/bin/python2.7 w jego ścieżce:
źródło
U mnie zadziałało nadpisanie środowiska PATH dla niewolnika.
Następnie odłącz i ponownie podłącz slave.
Pomimo tego, co pokazywały informacje o systemie, zadziałało.
źródło
Mam Jenkins 1.639 zainstalowany na SLES 11 SP3 przez zypper (menedżer pakietów). Instalacja skonfigurowała jenkins jako usługę
Chociaż
/etc/init.d/jenkins
źródła/etc/sysconfig/jenkins
, wszelkie ustawione tam zmienne env nie są dziedziczone przez proces jenkins, ponieważ jest uruchamiany w oddzielnej powłoce logowania z nowym środowiskiem, takim jak to:Sposób, w jaki udało mi się ustawić zmienne env dla procesu jenkinsa, znajduje się
.bashrc
w jego katalogu domowym -/var/lib/jenkins
. Musiałem tworzyć,/var/lib/jenkins/.bashrc
bo wcześniej tego nie było.źródło
Oto, co zrobiłem na Ubuntu 18.04 LTS z Jenkins 2.176.2
Stworzyłem plik .bash_aliases i dodałem tam ścieżkę, zmienne proxy i tak dalej.
Na początku .bashrc było to zdefiniowane.
Sprawdza więc, czy jeśli uruchomimy powłokę nieinteraktywną, to nic tutaj nie robimy.
na dole .bashrc było dołączone dla .bash_aliases
więc przeniosłem .bash_aliases ładując najpierw na .bashrc tuż nad nieinteraktywnym sprawdzaniem.
To nie zadziałało najpierw, ale potem odłączyłem slave i ponownie go podłączyłem, więc ponownie ładuje zmienne. Nie musisz restartować całych jenkinsów, jeśli modyfikujesz zmienne slave. po prostu odłącz i ponownie podłącz.
źródło
1- Dodaj do swojego profilu plik ".bash_profile"
znajduje się w folderze „/ home / your_user /”
vi .bash_profile
Dodaj:
==> to obszar roboczy e jenkins
2- Jeśli używasz jetty: przejdź do pliku jenkins.xml
i dodaj :
źródło