Как сделать 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)
    }
}
Другие вопросы по тегам