Jenkins共有ライブラリクラスの設計に関するガイダンスを探しています。共有ライブラリとしてグローバル変数を使用することは問題なく機能しますが、src /でクラスを定義し、それをインポートするたびに、クラスを解決できないというエラーが発生します。
これは私の共有ライブラリ構造です:
src
- de
- schlumpf
- Tester.groovy
vars
- sayHello.groovy
Class Tester.groovy
これが、パイプラインジョブ内で初期化したいクラスのコードです。
package de.schlumpf
public class Tester implements Serializable {
public String name = "test"
Tester(String pName) {
this.name = pName
}
def sayHi() {
echo "Hello, ${this.name}."
}
def sayHi(String name) {
echo "Hello, ${name}."
}
}
Var sayHello.groovy
#!/usr/bin/env groovy
def call(String name = 'human') {
echo "Hello, ${name}."
}
パイプラインジョブ
@Library('pipeline-library-demo')
import de.schlumpf.Tester //de.schlumpf doesn't work as well
stage('Demo') {
echo 'Hello world'
sayHello 'test'
def t = new Tester('Alice')
t.sayHi()
}
2行目で次のエラーが発生します:Unable to resolve class de.schlumpf.Tester。グローバル変数sayHelloは魅力のように機能します...私がここで間違っていることを誰かが知っていますか?
これはこれに似ているようですが、パスにタイプミスや何かが見つかりません... Jenkins Shared Librariesをクラスとして使用
公式ドキュメントはこちら: https://jenkins.io/doc/book/pipeline/shared-libraries/
バージョン
スクリプトブロック外でクラスのオブジェクトを作成したため、エラーがスローされます。以下のコードを試してみれば、うまくいくはずです。
@Library('pipeline-library-demo')
import de.schlumpf.*;
stages{
stage('Demo') {
steps{
echo 'Hello world'
sayHello 'test'
script{
def t = new Tester('Alice')
t.sayHi()
}
}
}
}