Continious integration jet brains teamcity. Віталій Галушка

34
Continuous Integration & JetBrains TeamCity

Transcript of Continious integration jet brains teamcity. Віталій Галушка

Continuous Integration &

JetBrains TeamCity

Що Таке СІ?

Це практика розробки програмного забезпечення, в якій члени всієї команди часто інтегрують свої наробки.

Кожна інтеграція верифікується автоматичним білдом, включаючи тести.

Типовий процес СІ розробки

Основні Принципи○ Підтримка репозиторію коду

○ Автоматизований білд

○ Автоматичне Тестування білду.

○ Кожен інтегрує зміни в основну гілку кожен день або 2.

○ Кожен коміт повинен бути збілджений (протестований).

○ Білд повинен бути швидким.

○ Тестувати в енваєрменті такому ж як і продакшен

○ Білд повинен бути легко доступні для тестерів і всіх зіцікавлених.

○ Збілджений код повинен бути доступним для всіх зацікавлених

Переваги

○ Проблеми інтеграції виявляються і виправляються швидко, що обходиться дешевше;

○ Негайний прогін модульних тестів для свіжих змін;

○ Постійна наявність поточної стабільної версії разом з продуктами збірок - для тестування, демонстрації і т.д

○ Часті перевірки коду підштовхують девелоперів до написання модульного, менш складного коду

○ Миттєвий ефект від неповного або непрацюючого коду привчає розробників до роботи в ітеративному режимі з більш коротким циклом

Недоліки

○ Витрати на налаштування роботи безперервної інтеграції;

○ Потенційна необхідність у виділеному сервері під потреби безперервної інтеграції;

○ Боязнь “поламаного” коду (негайний ефект при тестуванні).

Автоматизовані засоби

● CruiseControl

● Hudson/Jenkins

● Atlassian Bamboo

● JetBrains TeamCity

● ...

● ...

Причини вибору TeamCity

○ Зручний і зрозумілий інтерфейс

○ Підтримка парсінгу логів основних аналізаторів коду “з коробки”

○ Не потрібно доставляти плагіни(для PHP-проектів).

○ Гнучкість і зрозумілість в налаштуванні

○ Просто шикарна документація

Налаштування

Перналаштувати на MySQL:Рекомендована конфігурація DB:

○ InnoDB storage engine

○ UTF-8 character set

○ case-sensitive collation

Інсталяція драйвера:

● Завантажити драйвер з http://dev.mysql.com/downloads/connector/j/

● скопіювати mysql-connector-java-*-bin.jar в <TeamCity Data Directory>/lib/jdbc

● створити базу і користувача для TeamCity

● В папці <TeamCity data directory>/config перейменувати файл database.mysql.properties

в database.properties і вказати налаштування:

connectionUrl=jdbc:mysql://<host>/<database name>connectionProperties.user=<user>connectionProperties.password=<password>

Інсталяція TeamCity

Створення Проекту

Створення Проекту

Створення Проекту

Налаштування білду

Налаштування Експорту з VCS

Налаштування SVN

Налаштування SVN

Налаштування Build Runner

Налаштування Build Runner

Налаштування білду

Налаштування Build Triggering

Все готово !

Запуск Білда

Build Agent

Artifacts

Як їх "збирати"? :)

build.xml<!-- Unit Tests & coverage analysis --><target name="phpunit"> <echo message="PHP Unit..." /> <exec executable="phpunit" failonerror="true"> <env key="APPLICATION_ENV" value="testing"/> <arg line="--log-junit ${builddir}/logs/phpunit.xml" /> <arg line="--coverage-clover ${builddir}/logs/coverage/clover.xml" /> <arg line="--coverage-html ${builddir}/logs/coverage/" /> <arg line="-c ${sourcedir}/tests/phpunit.xml" /> </exec>

<echo message="##teamcity[importData type='junit' path='${builddir}/logs/phpunit.xml' whenNoDataPublished='error']" description="Import to TeamCity"

/> <echo

message="##teamcity[publishArtifacts '${builddir}/logs/phpunit.log']" description="Import phpunit log to TeamCity"

/> <zip destfile="${builddir}/logs/coverage.zip" basedir="${builddir}/logs/coverage" whenempty="skip" /> <echo

message="##teamcity[publishArtifacts '${builddir}/logs/coverage.zip']" /></target>

Нотіфікейшени

Репорти

Особлявості Налаштування для SCD

Налаштування параметрів білда

Налаштування чекаут

Налаштування Build Runner

○ Кастомні репорти

○ Інтеграція з IDE

○ Інтеграція з JIRA

○ Ран BuildAgent на Amazon EC2

○ Залежність між білдами

○ "Ланцюги" білдів

○ .....

Додаткові фічі

Дакую за увагу :)