0

基本的なJenkins パイプラインをまとめましたが、ほとんどの部分で期待どおりの動作をします。

ただし、私は ant を使用しており、特定の jar ファイルへのアクセスが必要です。ビルドステップを次のように指定しました:

stage('Build') {
  // Build the project
  env.PATH = "${tool 'ant'}/bin:${env.PATH}"
  sh 'ant -f dita-tools/build_all.xml -lib $WORKSPACE/dita-ot/lib:$WORKSPACE/dita-ot/lib/saxon'
 }

このパイプラインで実行したビルドは失敗し、次のエラーが生成されます。

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule

私が知る限り、これは ant が dita ot にある dost.jar にアクセスできないことが原因です。dost.jar を具体的に参照するなど、さまざまな方法でこの引数を定義しようとしましたが (含める jar が多数あります)、毎回同じエラーで失敗します。

Jenkins でスタンドアロンの ant プロジェクトをまとめると、ant は上記の引数を使用して jar に問題なくアクセスできます。パイプラインでこの引数/依存関係を提供するより良い方法はありますか?

更新: ビルド スクリプトにクラスパスの echo ステートメントを追加し、ビルド スクリプトのクラスパスに jar を追加すると実際に機能することを確認できました。したがって、すべての意図と目的のために、ant はターゲットに関連するすべてのベース ツールキット jar にアクセスできますが、エラーは解決しません。この時点で、問題は dita ot 自体ではなく、jenkins パイプラインの動作に関係しているように見えますか?

4

1 に答える 1

0

カスタムプラグインを使用していると思います。そうであれば、次のようにplugin.xmlで jar を正しく定義したことを確認してください。

<feature extension="dita.conductor.lib.import" file="lib/my.jar"/>

アップデート

java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule

このエラーは、メインの DITA-OT jar がクラスパスに見つからないことを意味します。これは、これがプラグインの問題ではないことを示しています。

通常、クラスパスを設定する必要はありません。Ant が自動的に設定します。Ant ビルド スクリプトの作成もお読みください。

次のようなスニペットを試してください。

node {
    try {
        checkout scm
        stage('Build') {
            sh '''
                dir=$(pwd)
                curl [your-dita-ot-url] --output dita-ot.zip
                unzip -qq "$dir/dita-ot.zip"
                rm dita-ot.zip
                chmod +x ${WORKSPACE}/dita-ot/bin/ant
                ${WORKSPACE}/dita-ot/bin/ant -f ${WORKSPACE}/build.xml -Ddita.dir=$dir/dita-ot -Dbranch.name=$BRANCH_NAME
            '''
        }
    } catch (e) {
        currentBuild.result = "FAILED"
        throw e
    } finally {
        notifyBuild(currentBuild.result)
    }
}
于 2017-09-07T15:10:33.100 に答える