Отчёты и графики для travis-ci и drone.io

от автора


В больших проектах уже довольно давно привык к плюшкам ci: прогону тестов, отчётам и автоматическому деплою. При разработке небольших проектов этого не хватает. 1 и 3 покрывает travis-ci(ну или drone.io), но вот визуализации результата нет никакой.

И сразу придумалось простое решение:

  • прогонять анализаторы на стороне ci;
  • отправлять их себе;
  • парсить результат и красиво отображать.

И это всё вылилось в небольшое приложение — coviolations.io(исходники сервера и приложения), сейчас оно

  • работает с публичными и приватными репозиториями на github;
  • работает с travis-ci, drone.io и при желании с jenkins;
  • умеет парсить результат pep8, sloccount, python unittest, pip-review и testem;
  • умеет рисовать статус-плашку ;
  • не умеет работать с репозиториями организаций.

Как подключить к проекту?

Для подключения к проекту надо добавить файл .covio.yml, например:

violations:   pep8: pep8 . --exclude='*migrations*'   sloccount: sloccount .   pip_review: pip-review   py_unittest: cat python_tests.txt   testem: cat testem.out 

Где слева название анализатора, а справа команда для получения его вывода.

Включить проект в управлении проектами и добавить вызов covio.
Для .travis.yml это будет:

after_script:   - pip install coviolations_app   - covio 

А для droner.io и jenkins:

pip install coviolations_app COVIO_TOKEN="token" covio 

token можно получить на странице проекта.

Нет парсера нужного анализатора?

Если нет нужного парсера, его легко сделать. Сам парсер это просто функция на python:

from tasks.const import STATUS_SUCCESS, STATUS_FAILED from .base import library   @library.register('название анализоатора') def parse_violation(data):     # data['raw'] - необработанный вывод анализатора     data['preview'] = data['raw'][:10] # краткий обработанный результат     data['prepared'] = data['raw'] + '!' # полный обработанный результат     data['status'] = STATUS_SUCCESS # или STATUS_FAILED, если всё плохо     data['plot'] = { # значения для отображения на графики         'lines_count': len(data['raw'].split('\n')),         'random_value': 5,     }     return data 

Доступные парсеры лежат в violations.

Что внутри?

Серверная часть написана на django, api реализовано через tastypie. Обработка результатов анализаторов происходит в пачке воркеров, сделанных с rq. Всё общение на стороне сервера происходит через redis. Данные хранятся в mongodb и postgresql. Браузерный клиент написан на coffeescript с backbone.js. Графики рисуются при помощи chart.js. Клиент с сервером общается по rest api и sockjs.

Как развернуть локально?

Для того чтобы развернуть локальную версию, достаточно склонировать проект, установить fabric и bower:

git clone https://github.com/nvbn/coviolations_web.git pip install fabric npm install bower 

Скопировать файл настроек из coviolations_web/settings/dist.py в coviolations_web/settings/local.py и заполнить его. В local_nvbn.py лежат мои локальные настройки, в local_production.py — настройки с продакшена.

И развернуть всё с:

fab install 

Для проверки можно запустить тесты с:

./manage.py test violations projects tasks services app push 

Для запуска нужно выполнить(каждая команда в отдельной консоле):

./manage.py runserver ./manage.py runpush ./manage.py rqworker 

Для отправки результатов из covio на локально развёрнутый инстанст надо добавить в .covio.yml:

endpoint: http://localhost:8000/api/v1/tasks/ 

Планы

Сейчас планируется добавить поддержку репозиториев организаций, проверку pull реквестов с автоматическим комментированием их и много-много парсеров. Ещё хочется из результатов анализаторов делать аннотации к коду, но это, скорее всего, нереально =)

Ссылки

ссылка на оригинал статьи http://habrahabr.ru/post/193394/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *