- PVSM.RU - https://www.pvsm.ru -
[1]
В больших проектах уже довольно давно привык к плюшкам ci: прогону тестов, отчётам и автоматическому деплою. При разработке небольших проектов этого не хватает. 1 и 3 покрывает travis-ci(ну или drone.io), но вот визуализации результата нет никакой.
И сразу придумалось простое решение:
И это всё вылилось в небольшое приложение — coviolations.io [2](исходники сервера [3] и приложения [4]), сейчас оно
;
Для подключения к проекту надо добавить файл .covio.yml, например:
violations:
pep8: pep8 . --exclude='*migrations*'
sloccount: sloccount .
pip_review: pip-review
py_unittest: cat python_tests.txt
testem: cat testem.out
Где слева название анализатора, а справа команда для получения его вывода.
Включить проект в управлении проектами [5] и добавить вызов 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 [6].

Серверная часть написана на django [7], api реализовано через tastypie [8]. Обработка результатов анализаторов происходит в пачке воркеров, сделанных с rq [9]. Всё общение на стороне сервера происходит через redis [10]. Данные хранятся в mongodb [11] и postgresql [12]. Браузерный клиент написан на coffeescript [13] с backbone.js [14]. Графики рисуются при помощи chart.js [15]. Клиент с сервером общается по rest api и sockjs [16].
Для того чтобы развернуть локальную версию, достаточно склонировать проект, установить 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 [17] лежат мои локальные настройки, в local_production.py [18] — настройки с продакшена.
И развернуть всё с:
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 реквестов с автоматическим комментированием их и много-много парсеров. Ещё хочется из результатов анализаторов делать аннотации к коду, но это, скорее всего, нереально =)
Автор: nvbn
Источник [21]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/43106
Ссылки в тексте:
[1] Image: http://habrastorage.org/storage3/ddf/08a/2d1/ddf08a2d158ef56218a0d9ed2d48dd54.png
[2] coviolations.io: http://coviolations.io/
[3] сервера: https://github.com/nvbn/coviolations_web
[4] приложения: https://github.com/nvbn/coviolations_app
[5] управлении проектами: http://coviolations.io/projects/manage/
[6] violations: https://github.com/nvbn/coviolations_web/tree/develop/violations
[7] django: https://www.djangoproject.com/
[8] tastypie: http://tastypieapi.org/
[9] rq: http://python-rq.org/
[10] redis: http://redis.io/
[11] mongodb: http://www.mongodb.org/
[12] postgresql: http://www.postgresql.org/
[13] coffeescript: http://coffeescript.org/
[14] backbone.js: http://backbonejs.org/
[15] chart.js: http://www.chartjs.org/
[16] sockjs: https://github.com/sockjs
[17] local_nvbn.py: https://github.com/nvbn/coviolations_web/blob/develop/coviolations_web/settings/local_nvbn.py
[18] local_production.py: https://github.com/nvbn/coviolations_web/blob/develop/coviolations_web/settings/local_production.py
[19] приложение;: http://coviolations.io
[20] документация.: https://coviolationsio.readthedocs.org/en/latest/
[21] Источник: http://habrahabr.ru/post/193394/
Нажмите здесь для печати.