如何列出jenkins管道作业中的所有`env`属性?

时间:2016-05-07 00:35:30

标签: jenkins groovy jenkins-pipeline

鉴于jenkins 2.1构建管道,jenkins将env变量注入node{}。例如,可以使用

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

我想在jenkins管道中回显所有 env属性。

我正在寻找像

这样的代码
node {
    for(e in env){
        echo e + " is " + ${e}
    }
    ...

会回应像

这样的东西
 BRANCH_NAME is myBranch2
 CHANGE_ID is 44
 ...

18 个答案:

答案 0 :(得分:70)

另一种更简洁的方式:

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

比照https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script

答案 1 :(得分:59)

根据Jenkins documentationdeclarative pipeline

sh 'printenv'

对于詹金斯scripted pipeline

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

为方便起见,上面也对你的env vars进行了分类。

答案 2 :(得分:14)

以下作品:

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

请注意,它很可能在首次执行时失败,并且需要您批准各种groovy方法才能在jenkins沙箱中运行。这是在"管理jenkins /进程内脚本批准"

中完成的

我收到的清单:

  • 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
  • JOB_NAME
  • JOB_URL

答案 3 :(得分:14)

您可以使用sh / bat步骤和readFile完成结果:

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

不幸的是env.getEnvironment()返回非常有限的环境变量图。

答案 4 :(得分:7)

为什么这么复杂?

sh 'env'

满足您的需求(在* nix下)

答案 5 :(得分:7)

这是一个快速脚本,您可以添加为管道作业以列出所有环境变量:

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

这将列出系统和Jenkins变量。

答案 6 :(得分:6)

我使用Blue Ocean插件,并不喜欢每个环境条目都有自己的块。我希望一个块包含所有行。

打印效果不佳:

sh 'echo `env`'

打印效果不佳:

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

打印好:

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

打印好:(如@mjfroehlich所述)

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

答案 7 :(得分:4)

读取全局env变量的 Pure Groovy 解决方案不会打印所有环境变量(例如,它们丢失了environment块,{{1 }}上下文以及操作系统中大多数机器特定的变量)。使用shell步骤可以得到更完整的集合,但这需要一个withEnv上下文,而这并非总是需要的。

这是一个解决方案,它使用getContext步骤来检索和打印当前上下文的完整环境变量集,包括管道参数。

注意事项:在Groovy沙箱中不起作用。不过,您可以从受信任的共享库中使用它。

node

答案 8 :(得分:3)

由于新的管道语法,上面的答案现已过时。下面打印出环境变量。

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

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

答案 9 :(得分:3)

列出所有环境变量的跨平台方式:

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

答案 10 :(得分:3)

最简单快捷的方法是使用以下网址打印所有环境变量

http://localhost:8080/env-vars.html/

答案 11 :(得分:1)

如果您真的想遍历env列表,请执行以下操作:

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

答案 12 :(得分:0)

另一种获得问题中提到的输出的方法:

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

这可以很容易地扩展为使用符合条件的env变量子集构建地图:

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}

答案 13 :(得分:0)

我想您以脚本的形式需要它,但是如果其他人只想通过Jenkins GUI进行浏览,则可以通过在每个构建的上下文左菜单中选择“环境变量”部分来找到该列表。 选择项目=>选择构建=>环境变量

enter image description here

答案 14 :(得分:0)

我发现这是最简单的方法:

pipeline {
    agent {
        node {
            label 'master'
        }
    }   
    stages {
        stage('hello world') {
            steps {
                sh 'env'
            }
        }
    }
}

答案 15 :(得分:0)

显示所有变量在Windows系统和Unix系统中是不同的,您可以定义一个函数来每次调用它。

def showSystemVariables(){    
   if(isUnix()){
     sh 'env'
   } else {
     bat 'set'
   }
}

我将首先调用此函数以显示所有pipline脚本中的所有变量

stage('1. Show all variables'){
     steps {
         script{            
              showSystemVariables()
         }
     }
} 

答案 16 :(得分:0)

答案 17 :(得分:-1)

您可以从jenkins实例中获取所有变量。只需访问:

  • $ {jenkins_host} /env-vars.html
  • $ {jenkins_host} / pipeline-syntax / globals