Étant donné un pipeline de construction jenkins 2.1, jenkins injecte une env
variable dans le fichier node{}
. Par exemple, BRANCH_NAME
accessible avec
node {
echo ${env.BRANCH_NAME}
...
Je veux faire écho à toutes les env
propriétés du pipeline jenkins
... considérant que je ne connais pas toutes les propriétés à l'avance.
Je recherche du code comme
node {
for(e in env){
echo e + " is " + ${e}
}
...
qui ferait écho à quelque chose comme
BRANCH_NAME is myBranch2
CHANGE_ID is 44
...
jenkins
groovy
jenkins-pipeline
JamesThomasMoon1979
la source
la source
env.each { name, value -> println "Name: $name -> Value $value" }
imprimeName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.new ClassName() { ... }
), cela devrait fonctionner. Ou vous l'exécutez sur une méthode étiquetée@NonCPS
, les fermetures fonctionneront également à l'intérieur.Réponses:
Une autre manière plus concise:
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
la source
sh
parbat
etenv
parset
sous Windows.Selon la documentation Jenkins pour le pipeline déclaratif :
Pour le pipeline scripté Jenkins :
Ce qui précède trie également vos variables d'environnement pour plus de commodité.
la source
printenv
est juste une commande shell qui imprime l'environnement, rien de spécifique à Jenkins. Sans arguments, cela équivaut àenv
sans arguments. Je suis presque sûr quesh 'printenv | sort'
cela fonctionnera dans DCL ou pipeline scripté.sh 'printenv | sort'
fonctionne en fait pour un pipeline déclaratif Jenkins; fwiwsh 'env | sort'
fonctionne également (tous deux testés sur Jenkins ver. 2.46.1). Je l'ai mentionné à l'originesh 'printenv'
parce qu'il était référencé dans la documentation officielle de Jenkins.Les travaux suivants:
Notez que cela échouera très probablement lors de la première exécution et que vous devrez approuver diverses méthodes groovy pour s'exécuter dans le sandbox jenkins. Cela se fait dans "gérer jenkins / approbation des scripts en cours de processus"
La liste que j'ai incluse:
la source
java.lang.UnsupportedOperationException: each on a CPS-transformed closure is not yet supported
@NonCPS
?Vous pouvez obtenir le résultat en utilisant
sh
/bat
step etreadFile
:env.getEnvironment()
Retourne malheureusement une carte très limitée des variables d'environnement.la source
sh 'env > env.txt'
fonctionne bien et inclut des variables d'environnement créées par le processus shell.env.getEnvironment()
affiche uniquement les variables d'environnement d'ensemble Jenkins qui sont un sous-ensemble de celles vues danssh 'env'
technique. En outre, il nécessite l'approbation de sécurité du scriptmethod org.jenkinsci.plugins.workflow.support.actions.EnvironmentAction getEnvironment
. Leenv.each { name, value -> println "Name: $name -> Value $value" }
recommandé par @Renato @Jayan ne s'imprime queName: org.jenkinsci.plugins.workflow.cps.EnvActionImpl@45c2d1ee -> Value null
.Pourquoi toute cette complication?
fait ce dont vous avez besoin (sous * nix)
la source
Voici un script rapide que vous pouvez ajouter en tant que travail de pipeline pour répertorier toutes les variables d'environnement:
Cela listera les variables système et Jenkins.
la source
Façon multiplateforme de lister toutes les variables d'environnement:
la source
J'utilise le plugin Blue Ocean et je n'aime pas que chaque entrée d'environnement ait son propre bloc. Je veux un bloc avec toutes les lignes.
Imprime mal:
Imprime mal:
S'imprime bien:
S'imprime bien: (comme mentionné par @mjfroehlich)
la source
Les réponses ci-dessus sont désormais désuètes en raison de la nouvelle syntaxe du pipeline. Ci-dessous imprime les variables d'environnement.
la source
for
avec une fermeture causera également des problèmes sans@NonCPS
annotation.Les solutions Groovy pures qui lisent la
env
variable globale n'impriment pas toutes les variables d'environnement (par exemple, il manque des variables duenvironment
bloc, duwithEnv
contexte et de la plupart des variables spécifiques à la machine du système d'exploitation). En utilisant les étapes du shell, il est possible d'obtenir un ensemble plus complet, mais cela nécessite unnode
contexte, ce qui n'est pas toujours souhaité.Voici une solution qui utilise l'
getContext
étape pour récupérer et imprimer l'ensemble complet des variables d'environnement, y compris les paramètres de pipeline, pour le contexte actuel.Avertissement: ne fonctionne pas dans le bac à sable Groovy. Vous pouvez cependant l'utiliser à partir d'une bibliothèque partagée approuvée.
la source
si vous voulez vraiment faire une boucle sur la
env
liste, faites simplement:la source
une autre façon d'obtenir exactement la sortie mentionnée dans la question:
Cela peut facilement être étendu pour créer une carte avec un sous-ensemble de variables d'environnement correspondant à un critère:
la source
Je suppose que vous en aviez besoin sous la forme d'un script, mais si quelqu'un d'autre veut juste jeter un œil à l'interface graphique de Jenkins, cette liste peut être trouvée en sélectionnant la section "Variables d'environnement" dans le menu contextuel de gauche de chaque construction Sélectionnez un projet = > Sélectionnez build => Variables d'environnement
la source
J'ai trouvé que c'était le moyen le plus simple:
la source
Vous pouvez obtenir toutes les variables de votre instance jenkins. Visitez simplement:
la source