Как сделать jar-файлы доступными для ant в конвейере Jenkins?
Я собрал базовый конвейер Jenkins, и он делает то, что я ожидаю, по большей части.
Тем не менее, я использую муравей, и он требует доступа к конкретным файлам 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
Из того, что я могу сказать, это связано с тем, что у муравья нет доступа к dost.jar, который находится в папке данных. Я попытался определить этот аргумент несколькими способами, включая конкретную ссылку на dost.jar (у меня есть несколько jar-файлов для включения), но каждый раз, когда он терпит неудачу с той же ошибкой.
Когда я собрал отдельный проект Ant в Jenkins, у Ant нет проблем с доступом к банке с помощью аргумента, который я привел выше. Есть ли лучший способ для меня предоставить этот аргумент / зависимость в конвейере?
ОБНОВЛЕНИЕ: я добавил оператор echo для classpath в свой скрипт сборки и смог убедиться, что добавление jar-файлов в classpath в скрипте сборки действительно работает. Таким образом, для всех целей и задач ant имеет доступ ко всем соответствующим jar-файлам базового инструментария для цели, но ошибка не устранена. На данный момент, похоже, что проблема как-то связана с тем, как работает конвейер Дженкинса, в отличие от самой детали?
1 ответ
Я предполагаю, что вы используете пользовательские плагины, если да, пожалуйста, убедитесь, что вы правильно определили ваши jar-файлы в plugin.xml следующим образом:
<feature extension="dita.conductor.lib.import" file="lib/my.jar"/>
ОБНОВИТЬ
java.lang.ClassNotFoundException: org.dita.dost.module.GenMapAndTopicListModule
Эта ошибка означает, что основной файл DITA-OT не найден на вашем пути к классам. Так что это указывает на то, что это не проблема с плагином.
Обычно вам не нужно настраивать classpath, 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)
}
}