Создание зависимых проектов с использованием Jenkins - PullRequest
4 голосов
/ 29 февраля 2012

Допустим, у меня есть 3 ANT-проекта, каждый со своим сценарием build.xml, расположенным в папке верхнего уровня

proj1
 file1.java
proj2
 file2.java
proj3
 file3.java

Я настроил Jenkins для построения этих 3-х проектов, и он создает их и сохраняет выходные данные в трехотдельные папки.

/output/proj1/2012-02-28_20-11-06/proj1/distribution/proj1.jar
/output/proj2/2012-02-28_20-11-08/proj2/distribution/proj2.jar
/output/proj3/2012-02-28_20-11-09/proj3/distribution/proj3.jar

ANT-скрипт - это тот, который помещает файл jar в папку дистрибутива.Я хочу использовать эти файлы JAR в другом проекте, который создает файл войны.

Файлы jar, которые создаются в каждом проекте, используются для создания файла WAR.Можно ли как-нибудь настроить Jenkins для сборки proj1, proj2, proj3, а затем скопировать файлы jar в определенное место, в котором будет находиться другой проект ANT, который при запуске создаст файл war?Или это нужно кодировать с помощью ANT?

Кроме того, можно ли настроить jenkins на несколько проверок перед запуском сценария сборки ANT.Я использую CVS и хотел бы сделать 3 извлечения, используя разные теги перед запуском сборки.

Редактировать

Я отправил вопрос прошлой ночью перед тем, как ложиться спать.Читая сегодня снова, я думаю, что это недостаточно ясно, поэтому я уточню требование еще раз.У меня есть 4 проекта, которые используют ANT в качестве механизма сборки и все они хранятся в хранилище CVS.Все 4 проекта при сборке формируют файл WAR, который развертывается на сервере приложений Tomcat.

proj1
 - file1.java
 - file2.java

proj2
 - file3.java
 - file4.java

proj3
 - file3.java
 - file4.java

proj4
  - jsp
    - home.jsp
 - css
    - home.css
  - WEB-INF
     - lib
     - classes 
    - web.xml

Каждый проект (кроме proj4) имеет файл сборки ANT, который создает проект и создает файл JAR, который он хранит в папке «Distribution» в корневой папке проекта.Например, после сборки proj1 он будет выглядеть следующим образом:

proj1
 - file1.java
 - file2.java
 - distribution
      - classes
           - file1.class
           - file2.class
      - proj1.jar

Proj4 зависит от proj1, proj2 и proj3 в том, что ему сначала нужно скопировать все файлы jar в свою рабочую область, прежде чем он создаст файл war,Файл сборки ANT для project4 копирует файлы JAR из proj1, 2 и 3 и создает файлы WAR.Полученный WAR-файл содержит следующую структуру

proj4
  - jsp
    - home.jsp
 - css
    - home.css
  - WEB-INF
    - lib
       - proj1.jar
       - proj2.jar
       - proj3.jar
    - classes 
    - web.xml  

Теперь, чтобы автоматизировать вышесказанное, мне нужно как-то настроить Jenkins и ANT для выполнения следующих действий (в указанном порядке)

- Checkout proj1 from CVS using RELEASE1.1 tag
- Build proj1

- Checkout proj2 from CVS using RELEASE1.2 tag
- Build proj2

- Checkout proj3 from CVS using RELEASE1.1 tag
- Build proj3

- Checkout proj4 from CVS using RELEASE1.1 tag
- Copy the proj1.jar, proj2.jar, proj3.jar from the previous 3 builds and copy them to the proj4 WEB-INF/lib folder.
- Build proj4
- Deploy the WAR file. 

IВчера поиграл с Дженкинсом и сумел настроить его для сборки каждого из проектов, но каждый файл JAR оказывается в несвязанной папке.Как я могу настроить Jenkins для создания проектов, как я описал выше?

Среда имеет следующие свойства

Build tool - ANT
OS - Solaris

Maven, вероятно, будет работать с этим, но в настоящее время нет планов по внедрению Maven.Если есть простой инструмент сборки, похожий на Maven, который я могу использовать для простого хранения нужных мне библиотек, для которых не требуется внешний доступ, пожалуйста, дайте мне знать.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 29 февраля 2012

Я не совсем понимаю, каковы ваши требования, но давайте попробуем:

Начните свои три задания с одного задания (назовем его TriggerJob ), используя Параметризованный плагин Trigger в качестве шага сборки.Дайте им TriggerJob BUILD_ID в качестве параметра, который они будут использовать для хранения результатов (вместо использования их собственных BUILD_ID; если вам все равно иногда придется создавать их отдельно - без вызова из TriggerJob - вы можете указать некоторое значение по умолчанию для параметра и проверить его с помощью Условный плагин BuildStep , когда он имеет значение по умолчанию - используйте собственный BUILD_ID, в противном случае используйте параметр, переданный в).

Сделайте TriggerJob , дождитесь окончания трех заданий, затем соберите банку ( TriggerJob знает, где они находятся) и перейдите к четвертому заданию, которое вызоветВаш последний ANT для архивирования их вместе (или сделайте это в шаге сборки ANT в TriggerJob , в зависимости от того, что подходит лучше).

На всякий случай следующее наблюдение может оказаться полезным для вас: каждый ANTШаг сборки может использовать свой собственный файл сборки (он находится под кнопкой ADVANCED).Вы можете использовать переменные окружения, чтобы указать его путь.

Несколько проверок: я не знаком с плагином CVS, но с плагином Subversion я предпочитаю делать вещи вручную: у меня есть триггерные задания, которые опрашивают SVN через плагин Subversionи передать номера ревизий в качестве параметров для заданий, которые выполняют фактическую работу.Затем эти задания используют явные вызовы SVN (из шагов сборки оболочки) для обновления до ревизий, переданных в качестве параметров.Может быть, вы можете сделать то же самое с плагином CVS.

2 голосов
/ 29 февраля 2012

Используйте Apache Ivy , когда proj1, proj2 и proj3 публикуют свои файлы JAR в хранилище артефактов. Затем вы можете запускать proj4 всякий раз, когда публикуете новую версию proj1, proj2 или proj3 (например, используя Jenkins Ivy Plugin ). Proj4 снова использует Ivy, но на этот раз для получения jar-файлов proj1, proj2 и proj3 в качестве зависимостей, которые затем используются для создания WAR (который вы также опубликуете в своем хранилище).

Если вы чувствуете себя уверенно, вы можете также переключиться с Ant на Gradle , который также использует Ivy под одеялом. Вы также можете рассмотреть вопрос Maven , но я недостаточно знаком с ним, чтобы рекомендовать его. Я слышал, что многие люди клянутся этим, и многие люди клянутся в этом.

Вот аналогичный вопрос и ответ

...