Лучший способ автоматически проверять и компилировать проекты Eclipse с помощью Ant in Hudson или другого инструмента CI? - PullRequest
9 голосов
/ 02 февраля 2009

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

Чтобы справиться с этим, мы используем много проектов Eclipse, некоторые содержат библиотеки jar, а некоторые содержат общий исходный код (в нескольких проектах, чтобы избежать гигантской кучи с многочисленными зависимостями, и при этом возможность компилировать все с нуля, чтобы гарантировать, что источник и двоичные файлы соответствуют). Мы управляем этими проектами с помощью projectSet.psf, поскольку они могут напрямую вытягивать все проекты из CVS и оставлять полностью подготовленное рабочее пространство. Мы не занимаемся сборкой муравьев напрямую и не используем maven.

Теперь мы хотим иметь возможность поместить все эти проекты и их различные версии в инструмент непрерывной интеграции - мне нравится Хадсон, но это всего лишь вопрос вкуса - что по сути означает, что нам нужно получить автоматический способ проверки проекты в новую рабочую область и скомпилируйте исходные папки, как описано в файлах проекта в каждом проекте. Хадсон не предлагает такой подход к созданию проекта, поэтому я обдумывал, как лучше всего к этому подойти.

Идеи были

  • Найдите или напишите плагин / конвертер ant, который понимает файлы projectSet.psf и сопоставляет их с cvs-checkout и компилирует теги.
  • Создайте файлы build.xml из Eclipse и используйте их. Я попробовал это и обнаружил, что результат получился многословным и с абсолютными местоположениями, что не годится для автоматических инструментов, помещающих файлы туда, куда они хотят.
  • Напишите плагин Hudson, который понимает файл projectSet.psf для получения конфигурации и ее построения.
  • Просто откусите пулю и вручную создайте и обновите конфигурацию CI всякий раз, когда что-то ломается - мне это не нравится:)

Мне бы очень хотелось услышать об опыте других людей, чтобы я мог решить, как к этому подойти.


Редактировать: другим вариантом может быть использование CI, который лучше знает проекты Eclipse и / или наборы проектов. Мы не религиозны - это просто вопрос запуска вещей без необходимости делать все самим. Будет ли круиз-контроль лучшим вариантом? Другие


Редактировать: Обнаружено, что ant4eclipse имеет средство "Team Project Set". http://ant4eclipse.sourceforge.net/


Редактировать: Использовать ant4eclipse и ant-contrib ant extensions для создания полного рабочего пространства в виде sjgned runnable jar-файла, похожего на средство Runnable Jar в Eclipse 3.5M6. Я все еще полагаюсь на Eclipse, чтобы создать начальную пустую рабочую область и извлечь ProjectSet, так что это следующее препятствие.


Редактировать: Закончено двойной конфигурацией, а именно то, что Хадсон извлекает из CVS тот же набор модулей, который указан в файле ProjectSet.pdf (который должен иметь тот же тег), в результате чего они располагаются рядом друг с другом. Тогда ant4eclipse хорошо работает с файлом projectSet.psf, встроенным в основной модуль. Предостережение: список модулей в Hudson необходимо обновить вручную, и, по-видимому, впоследствии потребуется ручная очистка рабочего пространства, чтобы Hudson «обнаружил», что сейчас существует больше проектов, чем раньше. Теперь это работало хорошо для нас в течение пары месяцев, но было довольно утомительно, чтобы все работало внутри файла ant.


Редактировать: «Использование командных проектов» с ant4eclipse и Ctrl-A, Ctrl-C на панели проектов с Ctrl-V в проектах CVS в Гудзоне оказалось достаточно хорошим для нас, чтобы жить (для зрелые проекты это очень редко меняют). Я жду релиза ant4eclipse 1.0 - http://www.ant4eclipse.org/,, который в настоящее время находится на этапе 2 - чтобы увидеть, сколько доморощенной функциональности можно заменить вещами ant4eclipse.

Редактировать: ant4eclipse по состоянию на 20100609 в M4, поэтому график в http://www.ant4eclipse.org/node?page=1 несколько смещается.


Edit: мой вывод после использования нашего подхода ant4eclipse в течение более длительного периода заключается в том, что скрипт сборки становится очень грубым и его трудно поддерживать. Также средство Team ProjectSet (которое ant4eclipse использует для поиска проектов), которое хорошо работает для репозиториев на основе CVS, но не после того, как мы перешли на git (что само по себе очень важно). Новые проекты, скорее всего, будут основаны на Maven, так как это имеет хорошую поддержку в Jenkins.

Ответы [ 3 ]

3 голосов
/ 02 февраля 2009

Я не совсем уверен, что понимаю проблему, но похоже, что корень проблемы в том, что у вас много проектов, некоторые из которых зависят от других. Некоторые из проектов, которые находятся ближе к «листу» дерева зависимостей, должны иметь возможность использовать «стабильные» (или ранее «выпущенные») версии более «базовых» проектов.

Я решаю именно эту проблему, используя Гудзон , муравей и плющ . Я следую шаблону, продемонстрированному Кларком в Pragmatic Project Automation (он не демонстрирует проблемы и решения зависимостей, и он использует CruiseControl, а не hudson.)

У меня есть рукописный файл сборки ant (мы называем его "cc-build.xml" из-за наших корней CruiseControl.) Этот файл отвечает за обновление рабочего пространства для проекта из репозитория CM и маркировку содержание для дальнейшего использования. Затем он передает управление другому рукописному файлу сборки ant (build.xml), который предоставляется разработчиками каждого проекта. Этот проект отвечает за традиционные этапы сборки (компиляция, упаковка и т. Д.). Он должен выплевывать устанавливаемые артефакты, отчеты о модульных тестах и ​​т. Д. В каталог артефактов Hudson. По моему опыту, автоматически создаваемые файлы сборки (Eclipse или другие подобные IDE) никогда не приблизятся к получению этого достаточно надежного для использования в сценарии CI.

Кроме того, он использует плющ для разрешения своих собственных зависимостей. Ivy поддерживает точно определенные версии зависимостей (например, «используйте версию 1.1») и поддерживает «нечеткие версии» (например, «используйте версию 1.1+» или «используйте последнюю версию в статусе интеграции»). Наши проекты обычно начинаются с указания очень «Нечеткая» версия для внутренних проектов, находящихся в стадии разработки, и когда они приближаются к точке выпуска, они «замораживают» версию зависимости, так что вещи перестают двигаться под ними.

Неконечные проекты (проекты, которые являются зависимыми от других проектов) также используют ivy для публикации своих артефактов в нашем внутреннем репозитории ivy. Этот репозиторий сохраняет все прошлые сборки зависимостей, так что любой проект всегда может зависеть от любой другой предыдущей версии.

Наконец, каждый проект в Hudson настроен на создание триггера сборки, который вызывает перестроение при успешной сборке любого из его зависимых проектов. Это заставляет их собираться снова с (возможно) новой зависимой версией плюща.

Стоит отметить, что как только вы это запустите, последовательная автоматическая «маркировка» или «маркировка» входов автоматической сборки будет для вас критически важной, иначе устранение неполадок после сборки может привести к распутать гнездо шершня, чтобы найти первоисточник.

Чтобы получить все эти настройки для нашей среды, потребовалось немало усилий (в первую очередь, для настройки репозитория ivy и файлов сборки ant), но он многократно окупился, сэкономив головные боли при ручном управлении зависимостями и уменьшил поиск и устранение неисправностей.

1 голос
/ 04 февраля 2009

Я испробовал круиз-контроль (CC) и Hudson для нашего решения CI. Мы (как компания) выбрали Хадсон. Но на ваш вопрос «Поддерживает ли CC сборку проекта Eclipse», ответ, насколько я знаю, нет. CC поддерживает множество других инструментов сборки и системы контроля версий, но это немного сложнее в настройке и использовании. Что касается Гудзона, его проще настроить и использовать. Мы разработали наши собственные плагины для CC и Hudson для тех частей нашего цикла сборки, которые они не предоставляют как есть. Что касается разработки плагинов, если вы знаете / используете Maven, Hudson тоже проще. Но если вы не знакомы с Maven, сначала вам нужно изучить основы использования maven, чтобы успешно разработать плагин Hudson. Но как только вы поймете, как использовать maven, разработка плагинов, тестирование и даже отладка в Hudson станут проще.

Для вашей конкретной проблемы я могу придумать решение, которое также использует плагины Eclipse. Вы можете разработать свой собственный плагин Eclipse, который, например, получает файлы psf из (настраиваемой) папки, и использовать внутренние компоненты Eclipse для обработки этих psf. Я имею в виду, что вы можете использовать существующие исходные коды Eclipse, которые принимают файл psf, извлекают его определения проектов и компилируют эти проекты. Этот плагин Eclipse может иметь страницу настроек (доступ к которой можно получить с помощью Eclipse -> Window -> Preferences) и настраивать, какую папку он будет использовать для поиска файлов psf. Ваш плагин Eclipse также должен иметь способ начать обработку psf без участия пользователя. Для этого вы можете использовать ipc для запуска вашего процесса. Я имею в виду, что ваш плагин Eclipse может прослушивать порт, и вы можете написать другое Java-приложение, которое будет подключаться к вашему плагину через этот порт и запускать его процесс. Что касается CI-части, вы можете использовать CC или Hudson и использовать поддержку их внешнего процесса. Если вы используете Windows, вы можете написать bat-файл (для Linux sh file), который сначала запускает Eclipse, на котором установлен ваш плагин. Затем он запускает ваше Java-приложение, которое будет взаимодействовать с вашим плагином Eclipse для запуска вашего процесса. Из вашего инструмента CI вам нужно будет запустить файл bat / sh для запуска вашего процесса.

1 голос
/ 02 февраля 2009

Напишите плагин Hudson, который понимает projectSet.psf для получения конфигурацию и построить ее.

Мне кажется, это победный ответ.

Я работаю с CruiseControl, а не с Hudson, но по моему опыту, если вы сможете создать плагин, который решит вашу проблему, он быстро окупится. И, как правило, довольно просто написать плагин, который подходит для вашего решения, а не тот, который должен работать для всех в аналогичной ситуации.

...