我已经整理了一个基本的詹金斯管道,它在大多数情况下都可以做到。
但是,我使用的是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
我可以看出,这是由于蚂蚁无法访问dita ot中的dost.jar。我尝试过将此参数定义多种方法,包括专门引用dost.jar(我要包含许多罐子),但是每次失败时都会出现相同的错误。
当我在詹金斯(Jenkins)进行独立的蚂蚁项目时,蚂蚁通过我上面提供的论点访问罐子时没有问题。我有更好的方法可以在管道中提供此论点/依赖性吗?
更新:我在我的构建脚本中添加了一个为classpath的回声语句,并能够验证在构建脚本中将jar添加到build脚本中的jars实际上确实有效。因此,就所有意图和目的而言,ANT都可以访问目标的所有相关基本工具包,但错误仍然存在。在这一点上,问题似乎与詹金斯管道的工作方式与dita ot本身相对的方式有关吗?
我假设您使用自定义插件,如果是,请确保,您在 plugin.xml 中正确定义了罐子> SO:
<feature extension="dita.conductor.lib.import" file="lib/my.jar"/>
update
java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule
此错误意味着,在您的类路径上找不到主要的dita-ot jar。因此,这表明这不是插件问题。
通常您不必设置classpath,蚂蚁为您做到这一点。请阅读创建蚂蚁构建脚本。
请尝试这样的片段:
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)
}
}