bayzr и continue integration

В данной статье я приведу пример развертывания системы для статического анализа кода. Систсема будет состоять из таких компонент:

  1. CentOS7 x86_64
  2. bayzr
  3. bayzr-citool
  4. SonarQube
  5. squid
  6. yumbootstrap

Результат разворачивания данной системы:

  1. получение оценки качества кода
  2. визуальное ведение каждого обнаруженного недочета в исходном коде
  3. комплексный анализ проекта включающего различные языки программирования. Например: си в качестве бакэнда и python в качестве фронтэнда или в качестве утилит командной строки, а так же содержащий шелл скрипты
  4. организация дополнительной проверки в системе review

О SonarQube

SonarQube — платформа для проверки кода на качество по правилам, основанным на соглашениях и стандартах. Поддерживает более 20 различных языков программирования. Для дополнительного ознакомления с продуктом можно перейти по ссылке SonarQube

SonarQube поддерживает достаточно огромный арсенал статических анализаторов для различных языков, но некоторые из них - платные. Поэтому частично решить эту проблему я решил с помощью утилиты bayzr, которая помогает консолидировать и унифицировать вывод статических анализаторов и транспортировать этот вывод в SonarQube для дальнейшего анализа.

О bayzr-citool

Сам по себе SonarQube так же как и bayzr это статичные утилиты с веб-интефейсом, необходимо была утилита которая бы их объединяла, подготавливала каталоги где будут проходить анализ проекты, доустанавливала необходимые пакеты и создавала среду для сборки и анализа. особенно такой планировщик необходим для однотипных действий над одними и тем же проектами. Да-да-да, можно вспомнить про Jenkins, написать кучу шел скриптов для каждого проекта один раз и использовать их. При добавлении нового проекта брать шаблон шел сркипта и т.д и т.п. Хотелось чего-то более простого в конечном итоге. Поэтому был сделан и использован bayzr-citool. Сервис планировщик с веб-интерфейсом заточенный именно для связки SonarQube + bayzr.

О yumbotstrap

Кто прочитал статью о работе bayzr, тот понял, что для анализа си/си++ проектов необходима и желательна сборка. Поэтому для сборки решено было использовать chrooted окружение, создается такой себе скелет каталогов эмулирующий систему и делается в нее chroot, там происходит доустановка необходимых пакетов и анализ, замусоривание. После анализа скелет удаляется не оставляя следа от среды сборки и анализа. yumbootstrap это более легковесный аналог mockbuild. Вот ссылка на страницу yumbootstrap

О squid

Обыкновенный прокси сервер, используемый yum для кеширования устанавливаемых пакетов. Для ускорения работы системы.

Установка

Для чистого CentOS 7 для стандартной сборки, достаточно все просто:

yum install wget -y
wget http://download.opensuse.org/repositories/home:/bayrepo/CentOS_7/home:bayrepo.repo -O /etc/yum.repos.d/home:bayrepo.repo
yum install bayzr-citool -y
citool -setup-run

Все. В ходе установки у вас спросят что-делать - выбирайте 1. И выбирайте версию SonarQube и пароль для базы данных. Если система чистая, то установка должна пройти без проблем. В результате получаем систему с установленными всеми компонентами. Готовую для дальнейшего тюннинга.

SonarQube настройте самостоятельно, а вот про настройки citool дальше.

citool

Если для сборки достаточно CentOS7 то все готово, в противном случае необходимо будет внести правки в файлы: