У меня есть проект, который имеет:
- Клиент JS с несколько интересным процессом сборки. Это включает в себя компиляцию CSS, привязку и минимизацию JS и CSS, создание и обработку HTML и некоторые другие шаги. Инструменты Node, такие как Grunt или Gulp, великолепны.
- Сервер Java, который является WAR, развернутым на Tomcat. Он включает в себя эти активы, а также весь код Java. Он имеет всевозможные тесты: модульные тесты, интеграционные тесты, которые могут создавать DAO и говорить с БД, и сквозные тесты API, которые на самом деле говорят с приложением, работающим на Tomcat.
- Полноценные тесты с помощью Протрактор. Если вы не знакомы, это еще один инструмент Node, который обертывает Selenium.
Как я могу организовать весь этот процесс разумным, надежным и автоматическим способом?
В настоящее время у меня есть Gulp и Maven, причем Maven в основном владеет всем процессом.
- Он вызывает создание Gulp генерации ресурсов в источниках генерации с использованием antrun (doh, третий инструмент построения!).
- Он запускает регулярную сборку Java.
- Он запускает Tomcat с моей WAR в процессе предварительной интеграции.
- Он запускает тесты Java E2E, разговаривая с этим tomcat с отказоустойчивым плагином.
- Он снова вызывает Gulp с помощью antrun, на этот раз для запуска тестов Protractor.
- Он отключает Tomcat в тесте после интеграции.
- Предполагается проверить результаты проверки.
Подобные работы, за исключением того, что Maven, как правило, очень жесткие, и я чувствую, что забираю его слишком далеко. Использование antrun для вызова Gulp - уродливый трюк. Очень сложно контролировать зависимости между этими шагами и контролировать их результаты. Трудно контролировать порядок вещей в той же фазе. Отказоустойчивая проверка не обрабатывает внешние файлы отчета JUnit, созданные Gulp. Я мог бы продолжить.
Интересно, должен ли я делать больше на моем сервере сборки (Jenkins), возможно, используя конвейер сборки или параметризованные триггеры, но я никогда не делал этого, и я не уверен, что это действительно лучше.
Итак, как бы вы его реализовали?