我已经整理了一个基本的Jenkins pipeline,它在大多数情况下完成了我的期望。
但是,我正在使用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可以访问目标的所有相关基础工具箱,但错误仍然存在。在这一点上,问题似乎与jenkins管道的工作原理有关,而不是与dita本身相关吗?
答案 0 :(得分: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会为你做这件事。另请阅读Creating an Ant build script。
请尝试这样的片段:
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)
}
}