2014-01-20 18 views
30

私はScriptlerプラグインを使用していますので、ビルドステップとしてGroovyスクリプトを実行できます。私のJenkinsの奴隷は、サービスモードで窓を走っています。スクリプトラーラーでは、Windowsバッチスクリプトを使用する必要はありません。Jenkinsのビルドステップ(Windows)でGroovyスクリプトから環境変数を構築するためのアクセス

しかし、私はビルドステップで環境変数を取得するためにトラブルを持っている...これが働いている:BASEはジェンキンスの起動時にENV-VARSの一部である

System.getenv("BASE") 

。それは作品

echo %JOB_NAME% 

:しかし、私はステップを構築する「Windowsバッチコマンドを実行し、」追加している場合は

%JOB_NAME% 

を取得したいと思います。 私は同じ設定でビルドステップとしてscriptlerスクリプトを追加している場合:

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

私は取得しています:

JOB_NAME: null 

だから私は、Groovyのスクリプトから注入された環境変数を達することができますかビルドのステップとして?

答えて

7

Scriptler Groovyスクリプトは、ビルドのすべての環境変数を取得していないようです。以下のためのパラメータを追加し、あなたがScriptlerはあなたの仕事にステップを構築追加すると

  1. は、オプションを選択し、「スクリプトパラメータの定義」

  2. :しかし、あなたにできることは、スクリプトにパラメータとしてそれらを強制しています"Name:JOB_NAME"、 "Value:$ JOB_NAME"のように、渡す環境変数を入力します。値は '$ envName'型変数を使用してJenkinsビルド環境から展開されます。ジョブ設定のほとんどのフィールドは、私の経験からこの種の拡張をサポートしています。スクリプトで

  3. あなたが何かのようにパラメータにアクセスすることができますので、あなたは、パラメータと同じ名前の変数を持っている必要があります。

    のprintln「JOB_NAME = $ JOB_NAME」

私はSciddlerをいくつかの実験とは別に使ったことはありませんでしたが、あなたの質問には面白い問題がありました。私はこれが助けて欲しい!

+0

このアプローチの1つの問題(変数がMYVARと設定されていると仮定します)は、値がパラメータとして提供されていない場合、Groovyが "爆発する"ということです。 '' ' println" - >次の値が提供されました: " this.binding.variables.each {k、v - > println" $ k = '$ v' "} ' '' –

16

あなたは、このようにそれらを取得することができるかもしれません:

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

ハッキーに見えますが... – Rajish

+0

ジェンキンスのこの仕事はありません1.573 – bicepjai

40

リスナーとシステムグルーヴィー実行中に存在するオブジェクトを構築します。私は、これは(Linux上)仕事を得ることができる唯一の方法は、このアドバイスに従うことでした

def myVar = build.getEnvironment(listener).get('myVar') 
+1

ありがとう!これは、 "Execute System Groovy Script"ビルド・ステップで、env変数にアクセスする唯一の方法です。 –

+0

は私にとってはうまくいかず、「env varsをビルドラップとして注入すると問題が発生します:null」追加のエラーの詳細、この状況をデバッグする方法はありませんか? –

+0

「私はScriptlerプラグインを使用しています...」という質問には、システムのGroovy実行が必要なので、質問には答えません。 – christutty

5

:あなたはこれを行うことができます

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}" 

これはジェンキンス1です。624以下のように、私は変数を構築するために取得するために管理SystemGroovyScriptを実行し、グルーヴィーなプラグイン2.0で、ジェンキンス2.xの上でのCentOS 6.7

3

上で実行されている:

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')で十分です

関連する問題