web-dev-qa-db-ja.com

groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのマネージャー:Script1

Hudson内でGroovyを呼び出し(groovyプラグインを使用)、ビルドのプロパティを取得しようとしています。しかし、私はこの例外を取得しています:

groovy.lang.MissingPropertyException:そのようなプロパティはありません:クラスのマネージャー:Script1

これは次の行で取得します。

_def buildNUmber = manager.build.number
_

これは、スクリプトを使用するだけでなく、Jenkins内でインラインコマンドとして実行すると発生します。

以下の解決策を試しましたが、宣言自体の間に失敗します(2行目):

_Binding binding = new Binding();
binding.setVariable("manager", manager);
GroovyShell Shell = new GroovyShell(binding);
Shell.evaluate(new File("d:/dev/others/hudson/userContent/ScriptStuff.groovy").text);
_

上記は、Groovyコマンドを使用して実行されます。そして、ビルドを実行するとエラーが発生し、行について文句を言います-binding.setVariable("manager", manager);

Groovyスクリプトファイルを使用すると、次のエラーが表示されます。

_ def buildNumber = manager.build.number
_

両方のエラーは次のとおりです。groovy.lang.MissingPropertyException:No such property:manager for class:Script1

これで言及されているすべてを試してみました thread

Hudson 2.2.1とGroovy 2.1.3を使用しています。何が間違っているのでしょうか?

18

コードの一部が欠けているのかもしれませんが、マネージャーはどこで定義していますか?これが完全なGroovyスクリプトである場合、何も宣言されていない変数をバインドしようとしているので、失敗するのは奇妙なことではありませんか?

次のように、マネージャーを定義するだけです。

def manager = "my manager" // probably not what you want

また、現在のエラーを取り除く必要があります。

2
Erik Pragt

managerは特定のGroovyスクリプトプラグインによって提供されますが、すべてではありません。スクリプトを汎用的にするには、代わりにJenkins/Hudson APIを使用します。

import hudson.model.*

def build = Thread.currentThread().executable
def buildNumber = build.number
...
19
Craig

それが役立つ場合に備えて、「システムGroovyスクリプトの実行」を使用している場合は、「manager」変数を使用する必要はありません。これは私のために働いた-

def workspace = build.getEnvVars()["WORKSPACE"]
6
mmukhe

理由の1つgroovy.lang.MissingPropertyException:は、スコープ外の変数を使用している場合、またはその変数を定義していない場合にスローされます。

3
Maverick