Всем привет.
Значительное время в нашем проекте использовалась самописная система интеграционного тестирования — чекаут кода по хуку в системе контроля версий, прогонка тестов с поддержкой отчётов по покрытию кода, запись результатов в отдельный html-файл, который был доступен разработчикам через веб. Естественно, потом пришлось делать поддержку локов, чтобы одновременно не запускалось сразу два тестирования и т. п.
В конце концов на ее поддержку стала уходить ощутимая часть рабочего времени, которая давно свела к нулю все преимущества простоты разработки такой системы, и было решено установить нормальный сервер Continuous Integration.
В качестве новой системы был выбран Jenkins, о его установке и настройке для django-проекта и пойдет речь в этой статье. Кто заинтересовался, добро пожаловать под кат.
В случае Ubuntu добавляем ключ и источник (source) для установки пакетов:
В случае других ОС смотрим сюда:
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins
Затем:
После установки Jenkins запустится и будет слушать соединения на порту 8080, для того чтобы изменить порт, следует отредактировать в файле /etc/default/jenkins переменную HTTP_PORT (и другие переменные при необходимости)
Jenkins установлен и работает, теперь можно заняться установкой необходимых плагинов.
Переходим в меню Manage Jenkins -> Manage Plugins, вкладка Available. Выбираем необходимые нам плагины:
Для интеграции тестов django с сервером Jenkins будем использовать пакет django-jenkins (Кстати его автор, kmmbvnr, присутствует на хабре, передаю привет!). Пакет генерирует отчёты в xml-формате по всем выполненным тестам, плюс генерирует отчёты статических анализаторов кода. Эти отчёты затем обрабатываются собственно сервером Jenkins.
Установка:
Добавляем настройки для нашего django проекта:
Теперь у нас есть команда manage.py jenkins, которая будет выполнять тесты и создавать отчёты для Jenkins. Сейчас можно попробовать запустить её, чтобы посмотреть, что всё работает без ошибок. В случае успеха должен создаться каталог build с отчётами.
Данная часть статьи является немного переработанным оригинальным руководством по django-jenkins: https://sites.google.com/site/kmmbvnr/home/django-hudson-tutorial


При указании repository browser Jenkins будет показывать ссылки на diff-файл ревизий при просмотре списка изменений в сборке.







Для возможности запуска Selenium тестов в Jenkins, если таковые имеются, я добавил
класс JenkinsTestRunner в библиотеку django-selenium, о которой писал в своей предыдущей статье.
Всё настроено, можно нажать на Build Now и наслаждаться результатами:


А потом и заняться исправлением ошибок.
Спасибо за внимание.
Значительное время в нашем проекте использовалась самописная система интеграционного тестирования — чекаут кода по хуку в системе контроля версий, прогонка тестов с поддержкой отчётов по покрытию кода, запись результатов в отдельный html-файл, который был доступен разработчикам через веб. Естественно, потом пришлось делать поддержку локов, чтобы одновременно не запускалось сразу два тестирования и т. п.
В конце концов на ее поддержку стала уходить ощутимая часть рабочего времени, которая давно свела к нулю все преимущества простоты разработки такой системы, и было решено установить нормальный сервер Continuous Integration.
В качестве новой системы был выбран Jenkins, о его установке и настройке для django-проекта и пойдет речь в этой статье. Кто заинтересовался, добро пожаловать под кат.
Установка Jenkins
В случае Ubuntu добавляем ключ и источник (source) для установки пакетов:
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
vi /etc/apt/sources
#add "deb http://pkg.jenkins-ci.org/debian binary/"
В случае других ОС смотрим сюда:
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins
Затем:
apt-get update
apt-get install jenkins
После установки Jenkins запустится и будет слушать соединения на порту 8080, для того чтобы изменить порт, следует отредактировать в файле /etc/default/jenkins переменную HTTP_PORT (и другие переменные при необходимости)
Установка плагинов
Jenkins установлен и работает, теперь можно заняться установкой необходимых плагинов.
Переходим в меню Manage Jenkins -> Manage Plugins, вкладка Available. Выбираем необходимые нам плагины:
- Cobertura Plugin (Покрытие кода)
- Violations Plugin (Отчеты о коде — pylint, pyflakes, pep8)
- Git/Mercurial/SVN Plugin — кто что использует, так как мы используем Git, то далее на скриншотах будут показаны опции для GIT Plugin.
Django Jenkins
Для интеграции тестов django с сервером Jenkins будем использовать пакет django-jenkins (Кстати его автор, kmmbvnr, присутствует на хабре, передаю привет!). Пакет генерирует отчёты в xml-формате по всем выполненным тестам, плюс генерирует отчёты статических анализаторов кода. Эти отчёты затем обрабатываются собственно сервером Jenkins.
Установка:
pip install django-jenkins
pip install pep8
pip install pyflakes
Добавляем настройки для нашего django проекта:
INSTALLED_APPS += ('django_jenkins',)
JENKINS_TASKS = ('django_jenkins.tasks.run_pylint',
'django_jenkins.tasks.run_pep8',
'django_jenkins.tasks.run_pyflakes',
'django_jenkins.tasks.with_coverage',
'django_jenkins.tasks.django_tests',)
Теперь у нас есть команда manage.py jenkins, которая будет выполнять тесты и создавать отчёты для Jenkins. Сейчас можно попробовать запустить её, чтобы посмотреть, что всё работает без ошибок. В случае успеха должен создаться каталог build с отчётами.
Настройка Jenkins
Данная часть статьи является немного переработанным оригинальным руководством по django-jenkins: https://sites.google.com/site/kmmbvnr/home/django-hudson-tutorial
Итак, создаём новый проект: New Job -> Build a free-style software project

Настраиваем взаимодействие с SCM:

При указании repository browser Jenkins будет показывать ссылки на diff-файл ревизий при просмотре списка изменений в сборке.
Настраиваем проверку SCM на наличие изменений раз в полчаса:

Добавляем выполнение команды из django-jenkins (Add build step -> execute shell):

Выбираем Publish Cobertura Coverage Report и прописываем путь к отчёту:

Выбираем Publish JUnit test result report и также прописываем путь к отчётам:

Выбираем Report Violations и снова прописываем пути к отчётам:


Настраиваем email -уведомления если требуются:

Интеграция Selenium тестов
Для возможности запуска Selenium тестов в Jenkins, если таковые имеются, я добавил
класс JenkinsTestRunner в библиотеку django-selenium, о которой писал в своей предыдущей статье.
Результаты
Всё настроено, можно нажать на Build Now и наслаждаться результатами:


А потом и заняться исправлением ошибок.
Спасибо за внимание.