Programing

젠킨스 파이프 라인 작업 내에서 모든`env` 속성을 나열하는 방법은 무엇입니까?

lottogame 2020. 9. 23. 08:01
반응형

젠킨스 파이프 라인 작업 내에서 모든`env` 속성을 나열하는 방법은 무엇입니까?


jenkins 2.1 빌드 파이프 라인이 주어지면 jenkins envnode{}. 예를 들어 다음 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/ batstep 및 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

enter image description here

참고URL : https://stackoverflow.com/questions/37083285/how-to-list-all-env-properties-within-jenkins-pipeline-job

반응형