Настройка Jenkins в Linux без Tomcat или Apache (автономный сервис) с Borlands StarTeam - PullRequest
1 голос
/ 25 января 2012

Я прочитал документацию на странице jenkins, а также несколько других досок объявлений, и все они, кажется, предоставляют свои учебные пособия, используя Tomcat (ewwww) !!!. Моя задача - предоставить Jenkins как самостоятельный сервис по причинам ремонтопригодности. До сих пор я установил HUDSONHOME, CLASSPATH и JAVA_HOME. Моя версия Java

java version "1.6.0_20"
OpenJDK Runtime Environment (IcedTea6 1.9.7) (rhel-1.39.1.9.7.el6-x86_64)
OpenJDK 64-Bit Server VM (build 19.0-b09, mixed mode)

и у меня есть скрипт в /etc/profile.d, который выполняет следующее:

JAVA_HOME=/usr/java;
JRE_HOME=/usr/java/jre/bin;
if [ "${CLASSPATH}" == "" ]; then
CLASSPATH=/var/lib/jenkins/war/WEB-INF;
HUDSON_HOME=/var/lib/jenkins/war/WEB-INF;
else
CLASSPATH=${CLASSPATH}:/var/lib/jenkins/war/WEB-INF;
HUDSON_HOME=/var/lib/jenkins/war/WEB-INF;
fi
PATH=${PATH}:${JAVA_HOME}/bin:/opt/StarTeamCP_2009/bin:/opt/QtSDK/Desktop/Qt/474/gcc/bin:/opt/QtSDK/QtCreator/bin/:${CLASSPATH}:${HUDSON_HOME};
export JAVA_HOME;
export PATH;
export CLASPATH;

Глядя в / etc / passwd, оболочкой Jenkins по умолчанию является bash, поэтому нет необходимости в версии сценария csh. Как пользователь я могу войти, так как все переменные установлены правильно. Я установил RPM Jenkins с их домашней страницы RPM link .

Ошибка, которую я получаю из окна вывода Jenkins:

FATAL: com/starbase/starteam/Folder
java.lang.NoClassDefFoundError: com/starbase/starteam/Folder
    at hudson.plugins.starteam.StarTeamSCM.checkout(StarTeamSCM.java:127)
    at hudson.model.AbstractProject.checkout(AbstractProject.java:1195)
    at hudson.model.AbstractBuild$AbstractRunner.checkout(AbstractBuild.java:576)
    at hudson.model.AbstractBuild$AbstractRunner.run(AbstractBuild.java:465)
    at hudson.model.Run.run(Run.java:1404)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:46)
    at hudson.model.ResourceController.execute(ResourceController.java:88)
    at hudson.model.Executor.run(Executor.java:238)
Caused by: java.lang.ClassNotFoundException: com.starbase.starteam.Folder
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    ... 8 more

Чего мне не хватает?


Что касается вашего исключения "класс не найден", вы используете библиотеки, которые не являются частью Tomcat или Jenkins, и они, очевидно, зависят от элементов, которых также нет в Tomcat или Jenkins. Это приводит к вопросу: «Почему вы заполняете свою среду библиотеками Borland, если вы хотите запустить приложение не Borland?»

В ответ на это я использую плагин Starteam как часть Jenkins. Дженкинс должен знать определения классов StarTeam, содержащихся в файлах Borlands .jar.

1 Ответ

1 голос
/ 26 января 2012

--- Отредактировано в ответ на обновление ---

Хорошо, вам нужны библиотеки звездной команды для плагина Jenkins. Это понятно. Спасибо за разъяснения.

Поскольку вы используете RPM-версию Jenkins, вы используете Tomcat (это зависимость). Пытаетесь ли вы запустить Jenkins без Tomcat в будущем (и как вы поступите с этим) - ваш окончательный выбор; тем не менее, вы можете обнаружить, что Tomcat добавляет гораздо больше, чем вы думаете.

Проблема, с которой вы сталкиваетесь в настоящее время, связана с применением Tomcat безопасной загрузки классов. Вы не можете предполагать, что записи CLASSPATH для Tomcat доступны для внутренних веб-приложений. Для этого есть веские причины.

Поскольку Tomcat различает два (контейнер / приложение), приложения могут выбирать то, что им нужно, независимо друг от друга. Плюсом является то, что приложения не должны быть переписаны или изменены, чтобы использовать одну и ту же версию библиотеки (файл JAR). Минусом является то, что classpath и т. Д. Должны быть настроены для каждого веб-приложения.

Я предполагаю, что где-то в документации Jenkins есть элемент, в котором упоминается копирование (или связывание) в соответствующей библиотеке где-то в $ (webapps) / jenkins / WEB-INF / lib. Тем не менее, если будет какая-то документация для команды Jenkins-starteam, которую я должен иметь, я бы сначала обратился к ней.

Удачи.

--- Исходный пост следует ---

Jenkens - это веб-приложение на Java. Tomcat - это веб-сервер Java. Будет очень сложно запустить веб-приложение Java вне веб-сервера Java.

Веб-сервер открывает порт для приема веб-запросов, а затем направляет обработанные формы этих запросов в веб-приложение. Как правило, невозможно запустить приложение в автономном режиме, поскольку веб-приложения почти ничего не знают о деталях протокола HTTP, сетевых сокетов, отслеживании сеансов, аутентификации и т. Д.

Иногда возможно встроить небольшой Java-сервер в приложение (для обеспечения быстрого развертывания); однако на самом деле это не «более поддерживаемая» среда, поскольку во втором случае вам нужно запустить два «элемента» на одной машине, вы столкнетесь с проблемами встроенных конфигураций, борющихся за одни и те же порты. Это включает в себя «распаковку» приложения, внесение внутренних изменений и перепаковку. Любое «обновление» полностью сбрасывает настройки, специфичные для сайта.

Единственная "ewwww" часть о Tomcat, вероятно, вам неудобна. Это нормально, все начинают так.

Что касается вашего исключения "класс не найден", вы используете библиотеки, которые не являются частью Tomcat или Jenkins, и они, очевидно, зависят от элементов, которых также нет в Tomcat или Jenkins. Это приводит к вопросу: «Почему вы заполняете свою среду библиотеками Borland, если хотите запустить приложение не Borland?»

...