Post on 16-Jun-2015
Що Таке СІ?
Це практика розробки програмного забезпечення, в якій члени всієї команди часто інтегрують свої наробки.
Кожна інтеграція верифікується автоматичним білдом, включаючи тести.
Основні Принципи○ Підтримка репозиторію коду
○ Автоматизований білд
○ Автоматичне Тестування білду.
○ Кожен інтегрує зміни в основну гілку кожен день або 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>
Як їх "збирати"? :)
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>
○ Кастомні репорти
○ Інтеграція з IDE
○ Інтеграція з JIRA
○ Ран BuildAgent на Amazon EC2
○ Залежність між білдами
○ "Ланцюги" білдів
○ .....
Додаткові фічі