젠킨스 파이프 라인 작업 내에서 모든`env` 속성을 나열하는 방법은 무엇입니까?
jenkins 2.1 빌드 파이프 라인이 주어지면 jenkins env
는 node{}
. 예를 들어 다음 BRANCH_NAME
으로 액세스 할 수 있습니다.
node {
echo ${env.BRANCH_NAME}
...
젠킨스 파이프 라인 내의 모든 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')
// ...
}
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
선언적 파이프 라인에 대한 Jenkins 문서 에 따르면 :
sh 'printenv'
Jenkins 스크립트 파이프 라인의 경우 :
echo sh(script: 'env|sort', returnStdout: true)
위의 내용은 편의를 위해 환경 변수도 정렬합니다.
다음 작업 :
@NonCPS
def printParams() {
env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" }
}
printParams()
첫 번째 실행에서 실패 할 가능성이 높으며 젠킨스 샌드 박스에서 실행하려면 다양한 그루비 메서드를 승인해야합니다. 이것은 "젠킨스 / 진행중인 스크립트 승인 관리"에서 수행됩니다.
내가 포함 된 목록 :
- BUILD_DISPLAY_NAME
- BUILD_ID
- 빌드 번호
- BUILD_TAG
- BUILD_URL
- CLASSPATH
- HUDSON_HOME
- HUDSON_SERVER_COOKIE
- HUDSON_URL
- JENKINS_HOME
- JENKINS_SERVER_COOKIE
- JENKINS_URL
- JOB_BASE_NAME
- 직업 이름
- JOB_URL
sh
/ bat
step 및 readFile
다음을 사용하여 결과를 얻을 수 있습니다 .
node {
sh 'env > env.txt'
readFile('env.txt').split("\r?\n").each {
println it
}
}
불행히도 env.getEnvironment()
매우 제한된 환경 변수 맵을 반환합니다.
왜 이렇게 복잡합니까?
sh 'env'
(* nix에서) 필요한 작업을 수행합니다.
다음은 모든 환경 변수를 나열하기 위해 파이프 라인 작업으로 추가 할 수있는 빠른 스크립트입니다.
node {
echo(env.getEnvironment().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
echo(System.getenv().collect({environmentVariable -> "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}
그러면 시스템 및 Jenkins 변수가 모두 나열됩니다.
I use Blue Ocean plugin and did not like each environment entry getting its own block. I want one block with all the lines.
Prints poorly:
sh 'echo `env`'
Prints poorly:
sh 'env > env.txt'
for (String i : readFile('env.txt').split("\r?\n")) {
println i
}
Prints well:
sh 'env > env.txt'
sh 'cat env.txt'
Prints well: (as mentioned by @mjfroehlich)
echo sh(script: 'env', returnStdout: true)
Cross-platform way of listing all environment variables:
if (isUnix()) {
sh env
}
else {
bat set
}
The answers above, are now antiquated due to new pipeline syntax. Below prints out the environment variables.
script {
sh 'env > env.txt'
String[] envs = readFile('env.txt').split("\r?\n")
for(String vars: envs){
println(vars)
}
}
if you really want to loop over the env
list just do:
def envs = sh(returnStdout: true, script: 'env').split('\n')
envs.each { name ->
println "Name: $name"
}
another way to get exactly the output mentioned in the question:
envtext= "printenv".execute().text
envtext.split('\n').each
{ envvar=it.split("=")
println envvar[0]+" is "+envvar[1]
}
This can easily be extended to build a map with a subset of env vars matching a criteria:
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}
I suppose that you needed that in form of a script, but if someone else just want to have a look through the Jenkins GUI, that list can be found by selecting the "Environment Variables" section in contextual left menu of every build Select project => Select build => Environment Variables
'Programing' 카테고리의 다른 글
Sublime Text 2 Windows의 여러 커서 (0) | 2020.09.23 |
---|---|
Swift-서브 클래스에 의해 재정의되어야하는 클래스 메소드 (0) | 2020.09.23 |
Eclipse에서 JRE의 소스 코드를 보려면 어떻게해야합니까? (0) | 2020.09.23 |
구문 나쁜 관행을 만족시키기 위해 return 문이 있습니까? (0) | 2020.09.22 |
TEXTAREA에 Ctrl + Enter jQuery (0) | 2020.09.22 |