Pull to refresh

Непрерывная интеграция и TeamCity

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

imageВ этом топике мы в общих чертах рассмотрим процесс реализации непрерывной интеграции на примере TeamCity Enterprise 6.0 EAP (build 15400) и обратим внимание на применении инструментов рассмотренных в прошлой теме: Обеспечение качества программного продукта.

Вам потребуется самостоятельно скачать и установить версию TeamCity подходящую для вышей платформы, а так же произвести установку инструментария из прошлой статьи, благо все это ставится без особых проблемы, но если что задавайте вопросы в комментариях. Так же вам потребуется какой-то существующий PHP проект уже хранящийся в SVN (или любой другой аналогичной системе).

TeamCity GUI будет доступен через HTTP на установленном хосте, после авторизации и конфигурирования главная страница будет выглядеть примерно как на скриншоте ниже. Каждый проект имеет свой собственный блок при большом количестве проектов можно настроить их видимость, так же статус каждого блока (свернут, развернут) запоминается. В проектах представлены конфигурации, для каждой из которое есть статус строка, в которой отображается информация о номере билда, индикатор (4 состояния: завершен успешно, завершен с ошибками, выполняется, выполняется с ошибками — все они интуитивно понятны), небольшое текстовое описание билда в котором сейчас можно наблюдать данные о количестве тестов и информацию об анализе кода. Почти у всех элементов есть AJAX подсказки которые отображают расширенную информацию и / или навигацию.



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



Процесс инициализации проекта состоит из 7 простых шагов, 3 из которых подразумеваются обязательными и их предлагается заполнить с помощью небольшого помощника, рассмотрим каждый по отдельности:

В основных настройках нам потребуется указать только имя проекта, значения всех остальных полей можно оставить по умолчанию:



Следующим шагом является интеграция с системой контроля версий, которая представлена на следующих изображениях. Потребуется указать тип и прочие данные для конфигурации, месторасположение указывайте в корень, все последующие преобразования при получении кода необходимо делать с помощью «Checkout rules», в моем случае достаточно одного простого правила "+:trunk=>source".





Следующий шаг это выбор инструмента для запуска процесса сборки проекта, опять же большую часть часть полей оставим по умолчанию, остальные заполним по аналогии со скриншотами, основной момент на который стоит обратить внимание — в данном примере используется встроенный Apache Ant, но если у вас есть другие предпочтения или опыт — дерзайте. конфигурационный файл будет храниться в SVN, как по по мне так это достаточно удобно.



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









Дальше нам нужно создать build.xml который будет управлять процессом сборки (после нескольких дней общения с ним могу сказать что это чудо инструмент который может заменить большую часть небольших shell скриптов для выполнения повседневных действий):

Стоит обратить внимание на аргумент default во второй строке и на элемент target в четвертой, дальше представлены различные задачи по запуску сторонних инструментов а так же интеграции их результатов с TeamCity. Инициализация идентичных задач для windows и unix выглядит несколько по-разному, но кстати это момент хоть и вызвал некоторые затруднения он оказался уже рассмотренным в FAQ Apache Ant. Вам же стоит только скопировать его содержимое. Взаимодействие с TeamCity производится с помощью сервисных сообщений:
  • ##teamcity[importData type='pmd' path='...']
  • ##teamcity[importData type='junit' path='...']
  • ##teamcity[publishArtifacts '...']


Комитим содержимое в репозиторий, если настроен тригер на комит, то сборка будет запущена автоматически, если нет — нажимаем Run из GUI. Через несколько минут нам будет доступна полная информация о сборке.

Суммарная информация о сборке.



Изменения из репозитория.



Выполненные тесты.



Лог процесса сборки.



Артефакты, некоторые из них представленные на следующих скриншотах в виде дополнительных вкладок. к сожалению пока не все результаты удалось красиво интегрировать, но нем не менее можно скачать и просмотреть в изначальном формате.











P. S.
Несмотря на то что хотелось написать статью в виде руководства к действию получился общий обзор, так что если какие-то моменты вам интересны, но не полностью раскрыты — комментируйте, постараюсь раскрыть.

В планах так же интегрировать Doxygen, Padawan и пару других инструментов. В примере build.xml секция pdepend включена в процесс сборки по умолчанию, поэтому результаты не отображены в артефактах, так же в build.xml отсутствует секция для очистки данных предыдущих сборок — начиная с шестой версии TeamCity за нас это делает швабра. Насчет PHP CodeBrowser по какой-то пока неясной причине в текущей версии GUI стал куда отстойней, для сравнения скриншот одной из первых версий:

image
Tags:Continuous IntegrationPHPTeamCityZend Frameworkphpmdphpdocphpcpdpdependphpcsphpunitphpcbphplocphpdcdphpcov
Hubs: PHP
Total votes 49: ↑44 and ↓5 +39
Views96.3K

Comments 49

Only those users with full accounts are able to leave comments. Log in, please.

Popular right now

Backend-разработчик (PHP)
from 80,000 to 150,000 ₽vc.ruRemote job
PHP разработчик Yii2
from 120,000 ₽HolyWebRemote job
Fullstack PHP developer
from 100,000 to 200,000 ₽RelizМосква
PHP разработчик (Yii2)
from 140,000 to 180,000 ₽KOTELOVСанкт-Петербург