Кирилл Комлев. О реализации continuous integration для web...

36
РЕАЛИЗАЦИЯ CONTINUOUS INTEGRATION ДЛЯ WEB ПРОЕКТОВ КИРИЛЛ КОМЛЕВ

Upload: olesyav

Post on 15-Aug-2015

104 views

Category:

Software


1 download

TRANSCRIPT

РЕАЛИЗАЦИЯ CONTINUOUS INTEGRATION ДЛЯ WEB ПРОЕКТОВ

КИРИЛЛ КОМЛЕВ

ДИСКЛЕЙМЕР

Рассматриваемая тема носит исключительно обзорный характер, не содержит конечных рецептов как и почему и поэтому вряд ли привнесут что-то новое настоящим гуру 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 METRIC

PHP METRIC В ЦИФРАХ

• Поддержка PHP, Python, Ruby, Java

• Очень клевый анализатор PHP

• Бесплатна для OpenSource проектов

• 49 евро в месяц на 10 repositories

• Интеграция с GitHub

• Можно запускать Unit тесты

SCRUTINIZER CI

SCRUTINIZER CI

SCRUTINIZER CI

SCRUTINIZER CI

SCRUTINIZER CI

SCRUTINIZER CI

CODE CLIMATE

• Поддерживает Ruby, JavaScipt, PHP

• Интеграция с GitHub

• Бесплатный для OpenSource

• На 5 пользователей с 5 репозиториями 99$ в месяц

• Нет поддержки автотестов

CODE CLIMATE

CODE CLIMATE

CODE CLIMATE

CODE CLIMATE

CODE CLIMATE

КАК СТАВЯТ ОЦЕНКИ SCRUTINIZER И CODE CLIMATE

• Ваш код оценивается по 4 критериям:

• Complexity (сложность)• Duplicity (дублированность)• Size (размер)• Security/Bugs (Безопасноть)

• Количество Issues на Количество строк полезного кода

• + авторский коэффициент (зависит от SaaS)

SONAR QUBE

• GNU/GPL, но плагины платные

• Поддерживает ВСЕ современные языки (через плагины)

• Интегрируется с TeamCity, Jenkins (через плагины конечно)

• Сам написан на JRuby

• Умеет почти все, что SaaS, но представление не то

• Может работать в 3 режимах

• Выводить ошибки (для IDE на станции разработчика)• Оценка кода для CI (Quality Gate)• Отдельный сервис (запущен самостоятельно)

АРХИТЕКТУРА SONAR QUBE

SONAR QUBE RULES

SONAR QUBE PROFILE – НАБОР RULES

SONAR QUBE - ISSUES

SONAR QUBE

SONAR QUBE – PROJECT VIEW

• Основной параметр – технический долг (необходимое время на устранение изъяна в кода)

• Оценки выставляются по 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 тестирование – защита от регрессии

• Нагрузочное тестирование – защита от для админов

• Тестирование по сценариям – защита от пользователей

• Когда все вместе – вы крутой!