티스토리 뷰
선언적 파이프 라인에 대한 Jenkins 문서 에 따르면 :
sh 'printenv'
Jenkins 스크립트 파이프 라인의 경우 :
echo sh(script: 'env|sort', returnStdout: true)
위는 편의를 위해 환경 변수도 정렬합니다.
-------------------더 간결한 또 다른 방법 :
node {
echo sh(returnStdout: true, script: 'env')
// ...
}
cf. https://jenkins.io/doc/pipeline/steps/workflow-durable-task-step/#code-sh-code-shell-script
-------------------다음 작업 :
@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 변수가 모두 나열됩니다.
-------------------모든 환경 변수를 나열하는 크로스 플랫폼 방식 :
if (isUnix()) {
sh env
}
else {
bat set
}
-------------------나는 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)
-------------------순수 그루비 글로벌 읽어 솔루션 env
모든 환경 변수를 인쇄하지 않는 변수 (예를 들어, 그들은에서 변수를 누락 environment
에서, 블록 withEnv
컨텍스트와 OS에서 시스템 특정 변수의 대부분). 쉘 단계를 사용하면 더 완전한 세트를 얻을 수 있지만 node
컨텍스트 가 필요하며 항상 원하지는 않습니다.
다음은 getContext
현재 컨텍스트에 대해 파이프 라인 매개 변수를 포함한 전체 환경 변수 세트를 검색하고 인쇄 하는 단계를 사용하는 솔루션입니다 .
주의 사항 : Groovy 샌드 박스에서는 작동하지 않습니다. 하지만 신뢰할 수있는 공유 라이브러리에서 사용할 수 있습니다.
def envAll = getContext( hudson.EnvVars )
echo envAll.collect{ k, v -> "$k = $v" }.join('\n')
-------------------위의 답변은 이제 새로운 파이프 라인 구문으로 인해 구식입니다. 아래는 환경 변수를 인쇄합니다.
script {
sh 'env > env.txt'
String[] envs = readFile('env.txt').split("\r?\n")
for(String vars: envs){
println(vars)
}
}
-------------------윈도우 시스템과 유닉스 시스템에서 모든 변수를 보여주기는 다르며, 매번 호출하는 함수를 정의 할 수 있습니다.
def showSystemVariables(){
if(isUnix()){
sh 'env'
} else {
bat 'set'
}
}
이 함수를 먼저 호출하여 모든 pipline 스크립트의 모든 변수를 표시합니다.
stage('1. Show all variables'){
steps {
script{
showSystemVariables()
}
}
}
-------------------정말로 env
목록 을 반복하고 싶다면 다음을 수행하십시오.
def envs = sh(returnStdout: true, script: 'env').split('\n')
envs.each { name ->
println "Name: $name"
}
-------------------질문에 언급 된 출력을 정확히 얻는 또 다른 방법 :
envtext= "printenv".execute().text
envtext.split('\n').each
{ envvar=it.split("=")
println envvar[0]+" is "+envvar[1]
}
기준과 일치하는 환경 변수의 하위 집합으로 맵을 빌드하도록 쉽게 확장 할 수 있습니다.
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}
-------------------스크립트 형태로 필요하다고 생각하지만 다른 사람이 Jenkins GUI를 통해 살펴보고자하는 경우 모든 빌드의 상황에 맞는 왼쪽 메뉴에서 "환경 변수"섹션을 선택하여 해당 목록을 찾을 수 있습니다. 프로젝트 선택 = > 빌드 선택 => 환경 변수
이것이 가장 쉬운 방법이라는 것을 알았습니다.
pipeline {
agent {
node {
label 'master'
}
}
stages {
stage('hello world') {
steps {
sh 'env'
}
}
}
}
-------------------젠킨스 인스턴스에서 모든 변수를 가져올 수 있습니다. 다음을 방문하십시오.
- $ {jenkins_host} /env-vars.html
- $ {jenkins_host} / pipeline-syntax / globals
출처
https://stackoverflow.com/questions/39914878