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

В микро проектах, возможно, на билд и его выкладку тратиться мало времени, но когда проект средний или крупный, включающий интеграцию с другими системами, который необходимо устанавливать на Websphere Application Server, например, уже заметно съедается время на сборку. Поэтому существует подход по автоматизации всех этих процессов под названием Continous Integration

Непрерывная интеграция (англ. Continuous Integration) — это практика разработки программного обеспечения, которая заключается в выполнении частых автоматизированных сборок проекта для скорейшего выявления и решения интеграционных проблем.

В этой статье я расскажу вам как внедрить Continuos Integration в ваш проект. Мы рассмотрим следующие пункты:

  • Установка и настройка Hudson
  • Интеграция с системой контроля версий Git
  • Автоматизированное тестирование сборки с помощью JUnit4
  • Интеграцию с багтрекером
  • Автоматизированное теггирование исходников в Git
  • Автоматическое проставление версии проекта

Установка и настройка Hudson

В моем случае я всегда устанавливаю Hudson CI на контейнер сервлетов Apache Tomcat, так как считаю это наиболее удобным для меня вариантом. Однако, Hudson доступен и в других вариантах установки. Найти последнюю версию Hudson CI вы можете на официальном сайте http://hudson-ci.org/.

  • Скачиваем последнюю версию Apache Tomcat здесь
  • Скачиваем последнюю версию Hudson CI здесь
  • Разархивируем Apache Tomcat в удобную директорию
  • Кладем war файл проекта Hudson в $CATALINA_HOME/webapps
  • Запускаем Apache Tomcat командой
catalina start

Далее открываем Hudson CI по ссылке http://localhost:8080/hudson-3.3.0/. Должно открыться окно с выбором плагинов, как показано на картинке ниже.

окно с выбором плагинов

Необходимо установить плагины, которые выделены по умолчанию и так же Hudson GIT plugin.  Далее, когда система будет установлена мы установим дополнительные полезные плагины.

Нажимаем Finish, внизу, и ждем пока все установиться. После установки откроется главный экран с настройками Hudson.

экран с настройками Hudson

Создание заданий для сборки

В своих проектах я создаю несколько заданий для сборки (минимум для билдов trunk и release), можно так же привязываться к веткам в репозитории. Задание trunk выполняется как по расписанию, так и по усмотрению членов команды. Задание release выполняется по усмотрения членов команды, в то время, когда необходимо выпустить релиз и передать заказчику.

Итак, нажимаем на ссылку “Новая задача”, в меню слева и заполняем и начинаем создавать задание. Наше задание будет состоять из нескольких задач:

  • Клонирование проекта из Git репозитория
  • Сборка релиза (с Junit тестами)
  • Проставлении версии релиза
  • Деплой проекта на сервер

В нашей версии Hudson будет установлен на той же машине что и сервер приложений для проекта, для упрощения задачи. Однако, у вас эти серверы могут быть разделены, но есть множество способов деплоить приложение на удаленный сервер. Некоторые серверы приложений, такие как Websphere Application Server предоставляют инструменты для удаленного деплоя. Но это уже совсем другая статья))).

  • Для начала необходимо создать новую задачу со свободной конфигурацией. Шаг 1
  • Настраиваем этапы сборки. Для начала необходимо выкачивать проект из репозитория. Тестовый проект для этой статьи я поместил на GITHub. Выбираем в задаче Git и указываем URL репозитория https://github.com/durdyev/testhudsonweb Далее добавляем шаги сборки. Можно вызывать из Hudson внешние скрипты системы, если это необходимо, цели Maven, Groovy скрипты и т.д. Тестовый проект у меня собирается с помощью Maven, поэтому добавляем шаг сборки “Вызывать цели Maven”. Шаг 1
  • Добавляем еще один шаг сборки deploy. В своей версии я просто напишу скрипт, который копирует war файл в папку webapps сервера tomcat. Шаг 1
  • Для того, чтобы иметь возможность скачать билд через веб интерфейс Hudson, необходимо установить галку “Заархивировать артефакты”. Шаг 1
  • При желании можно так настроить сборку по расписанию. Допустим каждый день в 20 часов вечера.

Настройка проверка для маппинга версии

Так как мой тестовый проект собирается с помощью maven, то необходимо в pom.xml указать в поле переменную  `${BUILD_NUMBER}`. Это внутренняя переменная Hudson, которая означает номер сборки. Далее в моем проекте я создал файл `version.properties`, в которое задал переменную version, которая в дальнейшем используется в проекте.   Теперь при каждой сборки проекта в файл version.properties записывается

Шаг 1

Заключение

Для автоматизации рутинных задач при разработки проектов такие приложения как Hudson сильно облегчают жизнь и значительно экономят время. Поэтому рекомендую использовать их.

Исходники тестового проекта вы сможете найти на GitHub

Теперь ваш конвеер работает =))))