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')
// ...
}
比較 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)
上記のものはあなたの環境変数も便利にソートします。
sh
/bat
stepおよびreadFile
を使用して結果を達成できます。
node {
sh 'env > env.txt'
readFile('env.txt').split("\r?\n").each {
println it
}
}
残念ながらenv.getEnvironment()
は非常に限られた環境変数のマップを返します。
次のように動作します。
@NonCPS
def printParams() {
env.getEnvironment().each { name, value -> println "Name: $name -> Value $value" }
}
printParams()
ほとんどの場合、最初の実行で失敗し、jenkinsサンドボックスで実行するために様々なGroovyメソッドを承認する必要があることに注意してください。これは「jenkins /インプロセススクリプト承認の管理」で行われています。
私が得たリスト:
なぜこのような複雑さがあるのでしょうか。
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変数の両方をリストします。
私はBlue Oceanプラグインを使用していますが、各環境エントリが独自のブロックを取得するのは嫌いでした。すべての行で1つのブロックが欲しいのですが。
印刷不良:
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)
すべての環境変数を一覧表示するクロスプラットフォームの方法:
if (isUnix()) {
sh env
}
else {
bat set
}
上記の答えは、新しいパイプライン構文のおかげで古くなっています。以下は環境変数を表示します。
script {
sh 'env > env.txt'
String[] envs = readFile('env.txt').split("\r?\n")
for(String vars: envs){
println(vars)
}
}
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]
}
これは簡単に拡張して、条件に一致する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}