2016-11-18 9 views
8

groovy.sql.SQLを使用するグローバル関数スクリプトを作成しようとしています。@GrabConfigを使用しているときにgrabのClassLoaderが見つからない

注釈を追加するときに、@GrabConfig(systemClassLoader=true) Jenkinsfileでグローバル関数を使用すると例外が発生します。ここで

は例外である:ここでは

hudson.remoting.ProxyException: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
General error during conversion: No suitable ClassLoader found for grab 

が私のコードです:

@GrabResolver(name='nexus', root='http://internal.repo.com') 
@GrabConfig(systemClassLoader=true) 
@Grab('com.microsoft.sqlserver:sqljdbc4:4.0') 
import groovy.sql.Sql 
import com.microsoft.sqlserver.jdbc.SQLServerDriver 

def call(name) { 
    echo "Hello world, ${name}" 

    Sql.newInstance("jdbc:sqlserver://ipaddress/dbname", "username","password", "com.microsoft.sqlserver.jdbc.SQLServerDriver") 
    // sql.execute "select count(*) from TableName" 
} 
+0

これを解決できましたか?同じ問題を経験する – StasKolodyuk

答えて

0

としてはhereを説明し、パイプライン "スクリプトは" 単純なGroovyスクリプトではありません、それらは重く、いくつか、実行する前に変換され、マスター上の部品、スレーブ上のいくつかの部品、状態(変数値)がシリアル化されて次のステップに渡されます。したがって、すべてのGroovy機能はサポートされていません。

私は@Grabをサポートしていません。それはJENKINS-26192で議論されています(これは解決済みと宣言されていますので、現在は動作している可能性があります)。非常に興味深いcommentから

エキス:あなたは 無制限Groovyのは物理的にスレーブ上で実行されているといくつかの複雑なまたは高価なタスクを実行する必要がある場合は

、それは単にそのコードを書くこと 、最も効果的な最も簡単かもしれ* .groovyファイルに ワークスペース(SCMチェックアウトなど)を作成してから、ツールと sh/batを使用してGroovyを外部プロセスとして実行します。また、 をGradleスクリプト、Groovy Mavenプラグインの実行などに組み込むこともできます。ワークフロー スクリプト自体は、 制御の全体的な流れを編成し、他のJenkins機能とのやりとりに焦点を当てた、単純で非常に軽量の 論理操作に限定する必要があります。スレーブ割り当て、 ユーザ入力などが含まれる。

要するに、SQLを必要とするカスタムパーツを外部スクリプトに移動し、別のプロセス(Pipelineスクリプトから呼び出される)で実行できる場合、それは機能するはずです。しかし、Pipelineスクリプト自体でこれを行うのはもっと複雑です。

0

[Groovyサンドボックスを使用する]チェックボックスがオフになっていることを確認します(パイプラインスクリプトのテキストボックスの下にあります)。

関連する問題