1
Непрерывная интеграция.Практическое применение
ДОКЛАДЧИК:
СМИРНОВ СЕРГЕЙ (НАЧ. СЕКТОРА, ОТДЕЛ 22)
СПб ГУП «СПб ИАЦ», 2013
Клуб разработчиковhttp://devclub.lan.iac.spb.ru
2
ПЛАН
1. Введение в непрерывную интеграцию
2. Практическая задача
3. Инструменты
4. Решение
5. Резюме
3
1. ВВЕДЕНИЕ В НЕПРЕРЫВНУЮ ИНТЕГРАЦИЮ
4
НЕПРЕРЫВНАЯ ИНТЕГРАЦИЯ
Кого/чего с кем/чем?Компонентов разрабатываемого ПО между собой
Для чего?Для контроля за работоспособностью
Когда?При каждом изменении
При помощи чего?Системы контроля версийСценария построенияСервера непрерывной интеграции
5
СХЕМА ИНТЕГРАЦИИ
6
РАЗРАБОТЧИКИ
Локальная проверка изменений перед фиксацией
Частая фиксация изменений
Изменения мелкие и атомарные
Информативные сообщения к каждой фиксации изменений
7
СИСТЕМА КОНТРОЛЯ ВЕРСИЙ
Хранение всех составляющих проекта:
исходные коды приложения и базы данных настройки среды разработки документация тестовые данные конфигурации различных сред развертывания библиотеки, компоненты, зависимости
Уведомление сервера CI о произведенных изменениях
Резервное копирование данных
8
СЕРВЕР CI
Сборка после каждой фиксации изменений
Сборка по расписанию
Каждый тип сборки в виде отдельной задачи
Ведение журнала и истории запусков
Запуск сборки по нажатию одной кнопки
Уведомление разработчиков
Хранение артефактов сборки
Публикация отчетов
9
СЦЕНАРИЙ ПОСТРОЕНИЯКлючевой элемент сборки
Не зависит от среды разработки (IDE)
Состоит из набора целей выполнения:
КомпиляцияИнтеграция БДЗапуск тестов (модульных, интеграционных и
т.д.)Запуска инспекций кодаЗапуск проверок следования соглашениямРазвертываниеПрочее
В качестве параметров получает файлы настроек
10
МЕХАНИЗМ ОБРАТНОЙ СВЯЗИ
Уведомление о неудачных сборках
Главная задача – оповестить и заставить отреагировать
Оповещение виновника в неудаче
Оповещение по e-mail
SMS оповещение
Световая или звуковая сигнализация
11
ПРЕИМУЩЕСТВА CI
Снижение рисков
Уменьшение ручных операций
Наличие развертываемого приложения в
любое время
Обеспечение лучшего контроля
12
CI ИЗБАВЛЯЕТ ОТ:
13
И ЕЩЕ ОТ:
14
ЛИТЕРАТУРА
15
2. ПОСТАНОВКА ЗАДАЧИ
16
ДАНО
Java веб-приложение
Библиотека модульного тестирования – Junit
Среда разработки – NetBeans
Инструмент сборки – Ant
Сервер CI – Hudson
Сервер приложений – Glassfish 3.x
Система контроля версия – Subversion
17
ТРЕБУЕТСЯ
Разработать сценарий построения для:
Сборки проекта Запуска модульных тестов Развертывания приложения на сервер
приложений Glassfish Настроить запуск построения проекта после
коммита
18
3. ИНСТРУМЕНТЫ
19
ANT Java утилита автоматизации сборки ПО
Процесс сборки описывается в XML-сценарии
Сценарий состоит из отдельных целей (Targets).
Цели содержат вызовы команд-заданий (Tasks).
Цели могут зависеть друг от друга
Примеры целей: clean, compile, test, deploy
Примеры заданий: javac, move, copy, exec, zip
Возможность разработки собственных заданий
Наличие большого количества библиотек
20
NETBEANS
Разработка приложения
Проект содержит базовый ant сценарий построения с точками расширения:
-pre-compile -post-compile -pre-test -post-test и т.д.
Запуск и отладка сценария построения
21
HUDSON CI
Сервер непрерывной интеграции
Веб-интерфейс
Большое количество плагинов
22
SUBVERSION Система контроля версий
Возможность запуска скриптов в ответ на события
Пример запуска построения после коммита
/var/svn_repo/name/hooks/post-commit#!/bin/shREPOS="$1"REV="$2"if svnlook changed --revision $REV $REPOS | egrep …then wget … http://url:8080/.../job/buildfi
23
GLASSFISH Варианты развертывания приложения
Через веб admin console Автодеплой as-install/domains/domain-name/autodeploy Через утилиту asadmin
Варианты автоматического развертывания на удаленном сервере
Вызов локальной утилиты asadmin на машине построения (asadmin enable-secure-admin)
Загрузка war файла на удаленный сервер через scp и последующий запуск утилиты asadmin через sshexec на удаленном сервере
24
3. РЕШЕНИЕ
25
РЕШЕНИЕ
o Инструкции и исходные коды
o svn://devclub.lan.iac.spb.ru/materialso Hudson
o http://devclub.lan.iac.spb.ru:8088/hudsono Презентация и видео
o http://devclub.lan.iac.spb.ru/web/devclub/archive
26
4. РЕЗЮМЕ
27
СПАСИБО ЗА ВНИМАНИЕ!