web-dev-qa-db-fra.com

Comment lister toutes les propriétés `env` dans le job de pipeline jenkins?

Avec un pipeline de génération jenkins 2.1, jenkins injecte une variable env dans le node{}. Par exemple, BRANCH_NAME est accessible avec

node {
    echo ${env.BRANCH_NAME}
    ...

Je veux faire écho aux propriétés all env dans le pipeline jenkins.

Je cherche un 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
 ...
66

Une autre façon, plus concise:

node {
    echo sh(returnStdout: true, script: 'env')
    // ...
}

cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-Shell-script

63
mjfroehlich

Selon la documentation Jenkins pour pipeline déclaratif :

sh 'printenv'

Pour Jenkins pipeline scripté :

echo sh(script: 'env|sort', returnStdout: true)

Ce qui précède trie également vos env pour plus de commodité.

50
Wimateeka

Vous pouvez obtenir le résultat en utilisant sh/bat step et readFile

node {
    sh 'env > env.txt'
    readFile('env.txt').split("\r?\n").each {
        println it
    }
}

Malheureusement, env.getEnvironment() renvoie une carte très limitée de variables d'environnement.

14
luka5z

Les oeuvres suivantes:

@NonCPS
def printParams() {
  env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" }
}
printParams()

Notez qu'il échouera probablement lors de la première exécution et vous obligera à approuver diverses méthodes groovy à exécuter dans le bac à sable jenkins. Ceci est fait dans "gérer l'approbation des scripts jenkins/in-process"

La liste que j'ai obtenue est la suivante:

  • BUILD_DISPLAY_NAME
  • BUILD_ID
  • BUILD_NUMBER
  • BUILD_TAG
  • BUILD_URL
  • CLASSPATH
  • HUDSON_HOME
  • HUDSON_SERVER_COOKIE
  • HUDSON_URL
  • JENKINS_HOME
  • JENKINS_SERVER_COOKIE
  • JENKINS_URL
  • JOB_BASE_NAME
  • NOM DU TRAVAIL
  • JOB_URL
11
Omri Spector

J'utilise le plugin Blue Ocean et je n'aimais pas que chaque entrée d'environnement ait son propre bloc. Je veux un bloc avec toutes les lignes.

Imprime mal:

sh 'echo `env`'

Imprime mal:

sh 'env > env.txt'
for (String i : readFile('env.txt').split("\r?\n")) {
    println i
}

Imprime bien:

sh 'env > env.txt'
sh 'cat env.txt'

Imprime bien: (comme mentionné par @mjfroehlich)

echo sh(script: 'env', returnStdout: true)
6
Jon Lauridsen

Voici un script rapide que vous pouvez ajouter en tant que travail de pipeline pour répertorier toutes les variables d'environnement:

node {
    echo(env.getEnvironment().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
    echo(System.getenv().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}

Ceci listera les variables système et Jenkins.

6
Daniel

Les réponses ci-dessus sont maintenant obsolètes en raison de la nouvelle syntaxe du pipeline. La liste ci-dessous affiche les variables d'environnement.

script {
        sh 'env > env.txt'
        String[] envs = readFile('env.txt').split("\r?\n")

        for(String vars: envs){
            println(vars)
        }
    }
3
Eddie

Pourquoi toute cette complication?

sh 'env'

fait ce dont vous avez besoin (sous * nix)

3
Andrey Regentov

Manière multiplateforme de lister toutes les variables d'environnement:

if (isUnix()) {
    sh env
}
else {
    bat set
}
2
Terry

si vous voulez vraiment parcourir la liste env, faites simplement:

def envs = sh(returnStdout: true, script: 'env').split('\n')
envs.each { name  ->
    println "Name: $name"
}
1
dsaydon

une autre façon d'obtenir exactement le résultat mentionné dans la question:

envtext= "printenv".execute().text
envtext.split('\n').each
{   envvar=it.split("=")
    println envvar[0]+" is "+envvar[1]
}

Cela peut facilement être étendu pour construire une carte avec un sous-ensemble de vars env correspondant à un critère:

envdict=[:]
envtext= "printenv".execute().text
envtext.split('\n').each
{   envvar=it.split("=")
    if (envvar[0].startsWith("GERRIT_"))
        envdict.put(envvar[0],envvar[1])
}    
envdict.each{println it.key+" is "+it.value}
0
Roman

Je suppose que vous aviez besoin de cela sous la forme d'un script, mais si quelqu'un d'autre veut simplement consulter l'interface graphique de Jenkins, cette liste peut être trouvée en sélectionnant la section "Variables d'environnement" dans le menu de gauche contextuel de chaque construction. Select project => Select build => Variables d'environnement

 enter image description here

0
claudod