web-dev-qa-db-ja.com

jenkinsパイプラインジョブ内のすべての `env`プロパティを一覧表示するにはどうすればいいですか?

Jenkins 2.1ビルドパイプラインを考えて、jenkinsはenv変数をnode{}に挿入します。たとえば、BRANCH_NAMEは次のようにしてアクセスできます。

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

ジェンキンスのパイプラインの中でallenvプロパティをエコーし​​たいのですが。

私はのようなコードを探しています

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

これは次のようなエコーになります

 BRANCH_NAME is myBranch2
 CHANGE_ID is 44
 ...
75

別の、より簡潔な方法:

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

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

70
mjfroehlich

によると Jenkinsのドキュメント宣言型パイプライン

sh 'printenv'

Jenkinsの場合 スクリプトパイプライン

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

上記のものはあなたの環境変数も便利にソートします。

60
Wimateeka

sh/bat stepおよびreadFileを使用して結果を達成できます。

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

残念ながらenv.getEnvironment()は非常に限られた環境変数のマップを返します。

14
luka5z

次のように動作します。

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

ほとんどの場合、最初の実行で失敗し、jenkinsサンドボックスで実行するために様々なGroovyメソッドを承認する必要があることに注意してください。これは「jenkins /インプロセススクリプト承認の管理」で行われています。

私が得たリスト:

  • BUILD_DISPLAY_NAME
  • BUILD_ID
  • ビルド番号
  • BUILD_TAG
  • BUILD_URL
  • クラスパス
  • HUDSON_HOME
  • HUDSON_SERVER_COOKIE
  • HUDSON_URL
  • JENKINS_HOME
  • JENKINS_SERVER_COOKIE
  • JENKINS_URL
  • JOB_BASE_NAME
  • 職種名
  • JOB_URL
14
Omri Spector

なぜこのような複雑さがあるのでしょうか。

sh 'env'

あなたが必要なことをする(* nixの下)

8
Andrey Regentov

これは、すべての環境変数を一覧表示するパイプラインジョブとして追加できる簡単なスクリプトです。

node {
    echo(env.getEnvironment().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
    echo(System.getenv().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}

これはシステム変数とJenkins変数の両方をリストします。

7
Daniel

私は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)
6
Jon Lauridsen

すべての環境変数を一覧表示するクロスプラットフォームの方法:

if (isUnix()) {
    sh env
}
else {
    bat set
}
3
Terry

上記の答えは、新しいパイプライン構文のおかげで古くなっています。以下は環境変数を表示します。

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

        for(String vars: envs){
            println(vars)
        }
    }
3
Eddie

envリストを本当にループしたい場合は、次のようにしてください。

def envs = sh(returnStdout: true, script: 'env').split('\n')
envs.each { name  ->
    println "Name: $name"
}
1
dsaydon

質問に記載されている出力を正確に取得する別の方法

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}
0
Roman

私はあなたがスクリプトの形でそれを必要としたと思います、しかし他の誰かがちょうどJenkins GUIを通して見たいと思うならば、そのリストはすべてのビルドのコンテキスト左メニューで「環境変数」セクションを選択することによって見つけることができます> build =>環境変数を選択します

enter image description here

0
claudod