Biorąc pod uwagę potok kompilacji Jenkins 2.1, Jenkins wstrzykuje env
zmienną do node{}
. Na przykład BRANCH_NAME
można uzyskać do niego dostęp za pomocą
node {
echo ${env.BRANCH_NAME}
...
Chcę powtórzyć wszystkie env
właściwości w potoku Jenkinsa
... biorąc pod uwagę, że nie znam wszystkich nieruchomości z wyprzedzeniem.
Szukam kodu takiego jak
node {
for(e in env){
echo e + " is " + ${e}
}
...
co mogłoby brzmieć jak echo
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon1979
źródło
źródło
env.each { name, value -> println "Name: $name -> Value $value" }
drukujeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), powinno działać. Lub uruchamiasz go na metodzie oznaczonej tagiem@NonCPS
, wtedy zamknięcia również będą działać w tym.Odpowiedzi:
Inny, bardziej zwięzły sposób:
por. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
źródło
sh
siębat
ienv
zeset
pod Windows.Według dokumentacji Jenkinsa dla deklaratywnego rurociągu :
Dla Jenkinsa potoku skryptowego :
Powyższe również sortuje zmienne środowiska dla wygody.
źródło
printenv
to po prostu polecenie powłoki, które wyświetla środowisko, nic specyficznego dla Jenkinsa. Bez argumentów jest równoważneenv
bez argumentów. Jestem prawie pewiensh 'printenv | sort'
, że będzie działać w DCL lub skrypcie.sh 'printenv | sort'
faktycznie działa dla deklaratywnego potoku Jenkinsa; fwiwsh 'env | sort'
również działa (oba testowane na Jenkins w wersji 2.46.1). Pierwotnie wspomniałem o tym,sh 'printenv'
ponieważ było to przywoływane w oficjalnej dokumentacji Jenkinsa.Następujące prace:
Zauważ, że najprawdopodobniej zakończy się niepowodzeniem przy pierwszym uruchomieniu i będzie wymagać zatwierdzenia różnych świetnych metod do uruchomienia w piaskownicy jenkinsa. Odbywa się to w „zarządzaniu jenkinsem / zatwierdzaniu skryptu w procesie”
Lista, którą otrzymałem:
źródło
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Możesz osiągnąć wynik za pomocą
sh
/bat
step ireadFile
:Niestety
env.getEnvironment()
zwraca bardzo ograniczoną mapę zmiennych środowiskowych.źródło
sh 'env > env.txt'
działa dobrze i zawiera zmienne środowiskowe utworzone przez proces powłoki.env.getEnvironment()
pokazuje tylko zmienne środowiskowe zestawu Jenkinsa, które są podzbiorem zmiennych widocznych wsh 'env'
technice. Wymaga również zatwierdzenia bezpieczeństwa skryptumethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
.env.each { name, value -> println "Name: $name -> Value $value" }
Zalecane przez @Renato @Jayan tylko drukujeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.Po co ta cała komplikacja?
robi to, czego potrzebujesz (pod * nix)
źródło
Oto krótki skrypt, który możesz dodać jako zadanie potoku, aby wyświetlić wszystkie zmienne środowiskowe:
Spowoduje to wyświetlenie zarówno zmiennych systemowych, jak i zmiennych Jenkinsa.
źródło
Międzyplatformowy sposób wyświetlania wszystkich zmiennych środowiskowych:
źródło
Używam wtyczki Blue Ocean i nie podobało mi się, że każdy wpis środowiska otrzymuje swój własny blok. Chcę jeden blok ze wszystkimi liniami.
Słabo drukuje:
Słabo drukuje:
Dobrze się drukuje:
Dobrze się drukuje: (jak wspomniał @mjfroehlich)
źródło
Powyższe odpowiedzi są teraz przestarzałe z powodu nowej składni potoku. Poniżej wypisuje zmienne środowiskowe.
źródło
for
Z zamknięciem będzie również powodować problemy bez@NonCPS
adnotacji.W czystej Groovy rozwiązania, które czytają globalną
env
zmienną nie wydrukować wszystkie zmienne środowiskowe (np tracą zmienne zenvironment
bloku, zwithEnv
kontekstu i najbardziej zmiennych maszynowego specyficznych od OS). Za pomocą kroków powłoki można uzyskać bardziej kompletny zestaw, ale wymaga to rozszerzenianode
kontekstu, który nie zawsze jest potrzebny.Oto rozwiązanie, które używa
getContext
kroku do pobrania i wydrukowania pełnego zestawu zmiennych środowiskowych, w tym parametrów potoku, dla bieżącego kontekstu.Uwaga: nie działa w piaskownicy Groovy. Możesz go jednak używać z zaufanej biblioteki współdzielonej.
źródło
jeśli naprawdę chcesz przeglądać
env
listę, po prostu zrób:źródło
inny sposób na uzyskanie dokładnie tego wyniku, o którym mowa w pytaniu:
Można to łatwo rozszerzyć, aby utworzyć mapę z podzbiorem zmiennych środowiskowych pasujących do kryteriów:
źródło
Przypuszczam, że potrzebowałeś tego w formie skryptu, ale jeśli ktoś inny chce tylko rzucić okiem na GUI Jenkinsa, tę listę można znaleźć, wybierając sekcję "Zmienne środowiskowe" w menu kontekstowym po lewej stronie każdej kompilacji. Wybierz projekt = > Wybierz build => Zmienne środowiskowe
źródło
Uważam, że jest to najłatwiejszy sposób:
źródło
Możesz pobrać wszystkie zmienne z instancji jenkins. Po prostu odwiedź:
źródło