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

鉴于jenkins 2.1构buildpipe道,jenkins将envvariables注入到node{} 。 例如, BRANCH_NAME可以通过访问

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

我想要回显jenkinspipe道中的所有 env属性。

我正在寻找类似的代码

 node { for(e in env){ echo e + " is " + ${e} } ... 

这将回应类似的东西

  BRANCH_NAME is myBranch2 CHANGE_ID is 44 ... 

另一种更简洁的方式:

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

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

根据Jenkins关于声明式pipe道的 文档 :

 sh 'printenv' 

对于jenkins脚本pipe道 :

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

上述也为了方便您的env varssorting。

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

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

不幸的是, env.getEnvironment()返回非常有限的环境variables映射。

以下工作:

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

请注意,它很可能会在首次执行时失败,并且需要您批准各种常规方法才能在jenkins沙箱中运行。 这是在“pipe理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

我使用蓝色海洋插件,并不喜欢每个环境条目获得自己的块。 我想要一块所有的线。

打印不好:

 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) 

上面的答案由于新的stream水线语法而过时了。 下面打印出环境variables。

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

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

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

这可以很容易地扩展到build立一个符合条件的env vars子集的映射:

 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}