Кирилл Комлев. О реализации continuous integration для web...
TRANSCRIPT
ДИСКЛЕЙМЕР
Рассматриваемая тема носит исключительно обзорный характер, не содержит конечных рецептов как и почему и поэтому вряд ли привнесут что-то новое настоящим гуру CI. Рассматриваемое здесь задачи касаются чуть больше чем полностью языков PHP и JavaScript. Говорить в основном будем о системах оценки качества кода.
ДЛЯ КОГО НУЖЕН CI
• Используете для разработки Agile
• Частый Deploy (раз в месяц это уже часто)
• Deploy на несколько объектов (доменов, хостов, организаций)
• Длительная поддержка продукта
ЧТО ТАКОЕ CONTINUOUS INTEGRATION
Непрерывная интеграция (CI) – принцип разработки ПО, которые заключается в частых автоматизированных сборках проекта.
ЧТО ЗНАЧИТ СБОРКА ДЛЯ WEB ПРОЕКТА
Получение исходников из SCM
Верификация качества кода (QA)
UNIT-тестирование
Демо-версия и Test Drive релиза
Выпуск (deploy) релиза
ЧТО ВАМ НАДО
• Прямые руки и толковых разработчиков
• Знание английского (документации много и ее надо читать)
• GIT (если другой SCM, то пора использовать GIT!)
• Выделенный сервер с большим числом RAM (Java она такая)
SVN TO GIT (ОТСТУПЛЕНИЕ)
• SVN в Git с историей реально• Ветки и теги с любой иерархией реально• Миграция это долго• git-svn и ничего больше• svn2git простенький wrapper на Ruby, делает жизнь проще• Надо сделать authors (svn users to git users)• Надо поправить .git/config
ДОСТОЙНЫЕ CITe
amC
ity
• Java• Разработка
JetBrains• 20 конфигов и
3 агента бесплатно
• Следит за сервером
• Web-интерфейс красивый, понятный, современный
Jenk
ins
/ H
udso
n • Java• Бесплатный• Океан
плагинов :D• Много
документации• Ant и Maven• Де факто в
мире GNU• Веб-
интерфейс делает все но выглядит ужасно
Bui
ldB
ot • Python• Бесплатный• Очень гибок • Framework
для вашего CI• Нет веб-
интерфейса• HardCore
Tra
vis
CI • Уже готовый
сервис (SaaS)• Бесплатно для
Open Source• Только для
проектов на GitHub
• Веб-интерфейс
• Крутые API
ДЛЯ ТЕХ, КТО САМ
#!/bin/sh
cd /tmp/micro_ci/wc && mkdir /tmp/micro_ci/lock || exit 2
rev=`svn info | grep 'Last Changed Rev' | sed 's/.*: *//'`svn up
if test `svn info | grep 'Last Changed Rev' | \ sed 's/.*: *//'` = $rev ; then rmdir /tmp/micro_ci/lock exit 0 fi
make test || status=$?rmdir /tmp/micro_ci/lock
exit $status
http://habrahabr.ru/post/229873/
ОЦЕНКА КАЧЕСТВА КОДА
• Консольные утилиты:• PHP Mess Detector• PHP Code Sniffer (+ fixer)• PHP CPD + DCD + LOC• PHP Depend + Cover• JSHint + JS Code Style• PHP Metrics
• Готовые SaaS:• Scrutinizer СI • Code Climate
• Отдельные системы анализа кода:• SonarQube
• Поддержка PHP, Python, Ruby, Java
• Очень клевый анализатор PHP
• Бесплатна для OpenSource проектов
• 49 евро в месяц на 10 repositories
• Интеграция с GitHub
• Можно запускать Unit тесты
SCRUTINIZER CI
CODE CLIMATE
• Поддерживает Ruby, JavaScipt, PHP
• Интеграция с GitHub
• Бесплатный для OpenSource
• На 5 пользователей с 5 репозиториями 99$ в месяц
• Нет поддержки автотестов
КАК СТАВЯТ ОЦЕНКИ SCRUTINIZER И CODE CLIMATE
• Ваш код оценивается по 4 критериям:
• Complexity (сложность)• Duplicity (дублированность)• Size (размер)• Security/Bugs (Безопасноть)
• Количество Issues на Количество строк полезного кода
• + авторский коэффициент (зависит от SaaS)
SONAR QUBE
• GNU/GPL, но плагины платные
• Поддерживает ВСЕ современные языки (через плагины)
• Интегрируется с TeamCity, Jenkins (через плагины конечно)
• Сам написан на JRuby
• Умеет почти все, что SaaS, но представление не то
• Может работать в 3 режимах
• Выводить ошибки (для IDE на станции разработчика)• Оценка кода для CI (Quality Gate)• Отдельный сервис (запущен самостоятельно)
• Основной параметр – технический долг (необходимое время на устранение изъяна в кода)
• Оценки выставляются по SQALE шкале (отношение полезных строк кода к техническому долгу)
• Свою шкалу оценок нельзя (или через свой плагин)
• Нет оценки каждого коммита
ОЦЕНКИ SONAR QUBE
ТЕПЕРЬ ПРО ТЕСТЫ
• Задача тестирование – не допустить регрессионных багов
• PHPUnit это хорошо
• PHPUnit/Paratest это быстро
• Нужен ли benchmark?
• Athletic (https://github.com/polyfractal/athletic)
• Tsunar• Test drive - Selenium
И НЕМНОГО О ДЕПЛОЕЕ
• Puppet
• Chef
• Ansible
• Salt
• Самонаписанный (а почему бы и нет?!)
• А может комбинировать!
ВЫВОДЫ
• CI стоит делать при частом и длительном развитии продукта
• QA системы хороши для OpenSource или если у вас плохо настроена IDE у программистов
• Тестирование это часть процесса разработки, а не роскошь
• Unit тестирование – защита от регрессии
• Нагрузочное тестирование – защита от для админов
• Тестирование по сценариям – защита от пользователей
• Когда все вместе – вы крутой!