web-dev-qa-db-ja.com

Jenkinsビルドステップのgroovyスクリプトからビルド環境変数へのアクセス(Windows)

Scriptlerプラグインを使用しているので、ビルドステップとしてgroovyスクリプトを実行できます。私のJenkinsスレーブは、サービスモードのWindowsで実行されています。スクリプターでは、Windowsバッチスクリプトを使用する必要はありません。

しかし、ビルドステップで環境変数を取得するのに苦労しています...これは機能しています:

System.getenv("BASE")

BASEは、jenkinsスタートアップのenv-varsの一部です。しかし、私は取得したい

%JOB_NAME%

「Windowsバッチコマンドの実行」ビルドステップを追加する場合:

echo %JOB_NAME%

できます。同じ設定でビルドステップとしてスクリプトラースクリプトを追加する場合:

println "JOB_NAME: " + System.getenv("JOB_NAME")

私は得ています:

JOB_NAME: null

では、ビルドステップとしてgroovyスクリプトから注入された環境変数に到達するにはどうすればよいですか?

44
Adam Ocsvari

Scriptler Groovyスクリプトは、ビルドのすべての環境変数を取得するとは限りません。しかし、あなたができることは、スクリプトへのパラメータとしてそれらを強制することです:

  1. Scriptlerビルドステップをジョブに追加するときに、オプション「Define script parameters」を選択します

  2. 渡す各環境変数のパラメーターを追加します。たとえば、「名前:JOB_NAME」、「値:$ JOB_NAME」。値は、「$ envName」型変数を使用してJenkinsビルド環境から拡張されます。ジョブ構成設定のほとんどのフィールドは、私の経験からこの種の拡張をサポートします。

  3. スクリプトには、パラメータと同じ名前の変数が必要です。そのため、次のような方法でパラメータにアクセスできます。

    println "JOB_NAME = $ JOB_NAME"

いくつかの実験を除いて、私自身はSciptlerを使用していませんが、あなたの質問には興味深い問題がありました。これがお役に立てば幸いです!

9
macg33zr

buildオブジェクトは、システムgroovyの実行中に存在します。あなたはこれを行うことができます:

def myVar = build.getBuildVariables().get('myVar')
51

次のように取得できる場合があります。

def thr = Thread.currentThread()
def build = thr?.executable
def envVarsMap = build.parent.builds[0].properties.get("envVars")
18
Alf

Jenkins 2.xで、groovyプラグイン2.0を使用してSystemGroovyScriptを実行すると、次のように変数を作成できました。

def build = this.getProperty('binding').getVariable('build')
def listener = this.getProperty('binding').getVariable('listener')
def env = build.getEnvironment(listener)
println env.MY_VARIABLE

ファイルからgoovyを使用している場合は、単純なSystem.getenv('MY_VARIABLE')で十分です

8

(Linuxで)これを機能させる唯一の方法は、次のアドバイスに従うことです。

https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+System+Groovy+script

import hudson.model.*

// get current thread / Executor and current build
def thr = Thread.currentThread()
def build = thr?.executable

// if you want the parameter by name ...
def hardcoded_param = "FOOBAR"
def resolver = build.buildVariableResolver
def hardcoded_param_value = resolver.resolve(hardcoded_param)

println "param ${hardcoded_param} value : ${hardcoded_param_value}"

これは、CentOS 6.7で実行されているJenkins 1.624にあります。

5
dayer4b

フリースタイルジョブを使用している場合、System Groovy Scriptビルドステップを使用していない限り、ビルドパラメーターまたはJenkins JVMの環境にアクセスできません。それを理解するのに十分な手がかりを集める前に、私は何時間もグーグルと研究をしました。

2

Jenkins 2.xにはグローバル変数があります。 envは、任意のスクリプトからの1つです...

println env.JOB_NAME

https://build.intuit.com/services-config/pipeline-syntax/globals#env の詳細

1