Chciałbym móc zrobić coś takiego:
AOEU=$(echo aoeu)
i ustaw Jenkinsa AOEU=aoeu
.
Sekcja Zmienne środowiskowe w Jenkins tego nie robi. Zamiast tego ustawia AOEU='$(echo aoeu)'
.
Jak mogę zmusić Jenkinsa do oceny polecenia powłoki i przypisania danych wyjściowych do zmiennej środowiskowej?
W końcu chcę mieć możliwość przypisania modułu wykonującego zadanie do zmiennej środowiskowej, która może być przekazywana do innych skryptów lub z nich używana.
Odpowiedzi:
Można to zrobić za pomocą wtyczki EnvInject w następujący sposób:
Utwórz krok kompilacji „Wykonaj powłokę”, który działa:
Utwórz krok kompilacji zmiennych środowiskowych Inject i ustaw „Ścieżkę pliku właściwości” na
propsfile
.Uwaga : Ta wtyczka jest (przeważnie) niezgodna z wtyczką Pipeline.
źródło
sh
na ścieżce.foo
zostanie wyeksportowany w tej konkretnej akcji powłoki, ale nie w innych akcjach.Najprostszy sposób
Wtyczki EnvInject można używać do wstrzykiwania zmiennych środowiskowych podczas uruchamiania kompilacji. Na przykład:
Skąd wiesz, że to działa
źródło
key=value
. W moim przypadku użyciacat app/build.gradle | grep "def majorVersion" | python -c 'import sys,re,os; print("VERSION_NUMBER="+re.findall(r"[\d+\.]+", sys.stdin.read())[0]+os.environ["BUILD_NUMBER"])'
BUILD_DATE=date "+%Y-%m-%d-%H_%M_%S"
iBUILD_DATE=$(date "+%Y-%m-%d-%H_%M_%S")
, aBUILD_DATE=`date "+%Y-%m-%d-%H_%M_%S"`
nie dla mnieW moim przypadku musiałem dodać
JMETER_HOME
zmienną środowiskową, aby była dostępna za pośrednictwem skryptów kompilacji Ant we wszystkich projektach na moim serwerze Jenkins (Linux), w sposób, który nie kolidowałby z moim lokalnym środowiskiem kompilacji (Windows i Mac) wbuild.xml
skrypcie . Ustawianie zmiennej środowiskowej za pomocą Zarządzaj Jenkins - Konfiguruj system - Właściwości globalne było najłatwiejszym i najmniej inwazyjnym sposobem na osiągnięcie tego. Nie są wymagane żadne wtyczki.Zmienna środowiskowa jest następnie dostępna w Ant za pośrednictwem:
Można to zweryfikować, dodając:
Który produkuje:
źródło
git
/path/to/my/git
iPATH+git
/path/to/my/git
. Jednakże, jeśli usiłuję dostępugit
z AJenkins pipeline script
, otrzymuję:/bin/sh: git: command not found
.Wtyczki Injector można używać do ustawiania zmiennych środowiskowych w Jenkins na poziomie zadania i węzła. Poniżej pokażę, jak ustawić je na poziomie pracy.
Manage Jenkins > Manage Plugins
i zainstaluj wtyczkę.Configure
ekranu swojej pracyAdd build step
wBuild
sekcji i wybierzInject environment variables
Jeśli musisz zdefiniować nową zmienną środowiskową w zależności od niektórych warunków (np. Parametrów zadania), możesz odnieść się do tej odpowiedzi .
źródło
Możesz spróbować czegoś takiego
źródło
Jenkinsfile
przypadku potoku (nie zadania)! To niesamowite, dzięki za to!EnvInject Plugin aka ( Environment Injector Plugin ) daje kilka opcji ustawiania zmiennych środowiskowych z konfiguracji Jenkins.
Wybierając
Inject environment variables to the build process
otrzymasz:Properties File Path
Properties Content
Script File Path
Script Content
i wreszcie
Evaluated Groovy script
.Evaluated Groovy script
daje możliwość ustawienia zmiennej środowiskowej na podstawie wyniku wykonanego polecenia :execute
metodą:Groovy
kodem:(Więcej szczegółów na temat każdej metody można znaleźć w pomocy do wbudowania (?))
Niestety nie możesz zrobić tego samego,
Script Content
jak to stwierdza:źródło
Istnieje Build Env Propagator Plugin, który pozwala dodawać nowe zmienne środowiskowe kompilacji, np
źródło
W moim przypadku skonfigurowałem zmienne środowiskowe przy użyciu następującej opcji i zadziałało-
źródło
Zwykle można skonfigurować zmienne środowiskowe we właściwościach globalnych w Konfiguruj system .
Jednak w przypadku zmiennych dynamicznych z podstawieniem powłoki może być konieczne utworzenie pliku skryptu w katalogu Jenkins HOME i wykonanie go podczas kompilacji. Wymagany jest dostęp SSH. Na przykład.
sudo su - jenkins
lubsudo su - jenkins -s /bin/bash
Utwórz skrypt powłoki, np .:
W Jenkins Build ( Wykonaj powłokę ) wywołaj skrypt i jego zmienne zanim cokolwiek innego, np
źródło
sudo su - jenkins
, wciążecho $USER
mi dajeroot
.su -l
do tego parametru, w przeciwnym razie zadaj osobne pytanie.Uwaga: Wartość zmiennej środowiskowej nadchodzi jako ciąg. Jeśli chcesz użyć go jako wartości logicznej, musisz go przeanalizować za pomocą Boolean.parse (env.DISABLE_SQL).
źródło
Wypróbuj wtyczkę środowiska Script ( GitHub ), która jest bardzo podobna do EnvInject . Pozwala na uruchomienie skryptu przed kompilacją (po sprawdzeniu SCM), który generuje dla niego zmienne środowiskowe. Na przykład
a w skrypcie możesz wydrukować np.
FOO=bar
na standardowe wyjście, aby ustawić tę zmienną.Przykład dołączenia do istniejącej
PATH
zmiennej-style:Możesz więc robić wszystko, czego potrzebujesz w skrypcie - albo
cat
plik, albo uruchomić skrypt w innym języku z drzewa źródłowego projektu itp.źródło
Możesz użyć jednego z następujących sposobów wymienionych poniżej:
Zarządzaj Jenkins -> Konfiguruj system -> Właściwości globalne -> Zmienne środowiskowe -> Dodaj
źródło
Z jakiegoś powodu
sudo su - jenkins
nie loguje mnie dojenkins
użytkownika , skończyło się na innym podejściu.Udało mi się ustawić globalne zmienne env przy użyciu Jenkins
config.xml
at/var/lib/jenkins/config.xml
(zainstalowane w Linux / RHEL) - bez użycia zewnętrznych wtyczek.Po prostu musiałem zatrzymać dodawanie Jenkinsa, potem dodawanie
globalNodeProperties
, a następnie restartowanie.Przykład, mam definiowania zmiennych
APPLICATION_ENVIRONMENT
iSPRING_PROFILES_ACTIVE
docontinious_integration
dołu,źródło
Używamy groovy file job:
źródło