2016-11-22 9 views
2

私はJava、Groovy、Jenkinsを初めて使用していますので、私には気をつけてください)Groovy Jenkinsパイプラインでグローバル外部Javaライブラリのメソッドを使用するには?

今後、私たちのビルド環境で使用するために、Jipkinsサポートを備えたJenkinsサーバを準備しています。 私は、Javaでラッパーを記述しなければならない特別なinhouseスクリプト言語を使用します。 Groovyのみで作業するオプションはありません。この特別な言語を使用する必要があります。

私はこのjenkinsプロジェクトにjava libを参照する方法を試しましたが、どちらもうまくいきませんでした。 主に私はこれを実装するためにhttps://github.com/jenkinsci/workflow-cps-global-lib-pluginのドキュメントを使用しましたが、googleやstackoverflowを検索するいくつかのアプローチも試みました。ドキュメントに続いて、このインクルードが可能でなければなりません。

テストのためにプロセスをテストセットアップに縮小しました。

は、私が「MultibranchTestProject01」という名前ジェンキンスにおけるマルチブランチプロジェクトを持っている以下の...

を想定します。
Jenkinsfile:

参照ライブラリはジェンキンスの設定で、「グローバルパイプラインライブラリ」を介してグローバルに参照されるが、ここで明示的に明確にする
@Library('[email protected]evelop') 

def runStageCollect = true 

if (runStageCollect) 
{ 
    stage("Collect") 
    { 
     helloWorld("Joe") 
    } 
} 

もの。 これはgit環境でホストされており、参照は機能しているようです。 このライブラリのファイル構造:

/vars/helloWorld.groovy

package de.dcomp.prod 

def call(name) { 
    def tt = new Test() 
    tt.testText() 
} 

/src/de/dcomp/prod/Test.groovy

package de.dcomp.prod 

import de.dcomp.ftel.* 

def testText() 
{ 
    def sRetVal = "" 
    echo "testText - START" 
    //sRetVal = ScriptRunner.GetStaticSampleText() 
    def oSR = new ScriptRunner() 
    sRetVal = oSR.GetInstanceSampleText() 
    echo "ReturnValue: ${sRetVal}" 
} 

私はと呼ばれるJavaのlibが持っているにScriptRunner-0.0.1-SNAPSHOT.jar。このライブラリには1つのクラスがあります:

package de.dcomp.ftel; 

public class ScriptRunner 
{ 
    public String GetInstanceSampleText() 
    { 
     return "ScriptRunner.GetInstanceSampleText() called..."; 
    } 
    public static String GetStaticSampleText() 
    { 
     return "ScriptRunner.GetStaticSampleText() called..."; 
    } 
} 

このライブラリをスタンドアロンJavaプロジェクトで参照して使用する際には問題ありません。テストLinux環境でのクラスパスの設定

  • : '\ cr.groovy \ libに\ユーザーC' にjarファイルを入れ

    • I'veは、それを含めるには、いくつかの方法を試してみました。

    • プラグイン "パイプライン:クラスパスステップ"を使用して、ライブラリをクラスパスに異なる表記で追加します。 'C:\ Users \ cr.groovy \ lib'、C:/Users/cr/.groovy/lib '、' C:\ Users \ cr.groovy \ lib \ ScriptRunner-0.0.1-SNAPSHOT.jar '、' C:/Users/cr/.groovy/lib/ScriptRunner-0.0.1-SNAPSHOT.jar '、' file:/// C:/Users/cr/.groovy/lib/ScriptRunner-0.0.1-SNAPSHOT.jar 「
    • これは私がして

    または動的ロードがしたいソリューションではありませんが、ローカルのMavenリポジトリにlibが追加と@GrabResolverと@Grabごとに参照:

    this.class.classLoader.rootLoader.addURL(new URL("file:///C:/Users/cr/.groovy/lib/ScriptRunner-0.0.1-SNAPSHOT.jar")); 
    def srClass = Class.forName("de.dcomp.ftel.ScriptRunner") 
    def sr = srClass.newInstance() 
    

    結果は常にこのようなものです。

    groovy.lang.MissingPropertyException: No such property: ScriptRunner for class: de.dcomp.prod.Test 
    

    またはこの:

    de/dcomp/prod/Test.groovy: 10: unable to resolve class ScriptRunner 
    @ line 10, column 12. 
        def oSR = new ScriptRunner() 
    

    エラーメッセージは、プロセスがJavaライブラリを見つけることができないという方向に常に指します。他のライブラリを使用しようとすると、同じことが起こりました。 Apache Commonsから。

    これが可能であれば、プラグインとして書くことを避けたいと思います。

    ありがとうございます!

  • +0

    私はこの「@グラブ」https://github.com/jenkinsci/workflow-cps-global-lib-plugin/blob/master/README.md#using-third-party-librariesを試していましたが、仕事 – Joan

    答えて

    4

    ディレクトリがチェックされているかを調べるためにパイプラインでこれを実行するためだった作品、私がこれまでに見つけた唯一の方法:

    println System.getProperty("java.ext.dirs") 
    

    そして、私の場合、それは

    で探していたに
    /usr/java/packages/lib/ext 
    

    私はその場所に(ディレクトリを作成しなければならない)ロードしたいJarを入れてからJenkinsを再起動しました。

    その後、私は正常にライブラリをインポートして使用することができました。

    非常にハッキーで、バグと見なされる可能性のあるものが予告なく削除されているようです。

    0

    パイプラインで外部ライブラリ(@Library)を使用している場合、グラブを使用してグレー依存関係を定義できます。以下の例はciinabox-pipelines共有ライブラリです。これはjarファイルをダウンロードし、groovyスクリプトで自動的にロードします。おそらく上記のコードは、パイプライン自体にを動作しないことが重要ですが、何

    @Grab(group='com.amazonaws', module='aws-java-sdk-ec2', version='1.11.198') 
    
    import com.amazonaws.services.ec2.* import com.amazonaws.services.ec2.model.* import com.amazonaws.regions.* 
    

    共有ライブラリの一部として読み込まれたときに、それが最新のプラグインのバージョンとすべきです。

    関連する問題