Pull to refresh

Настройка Jenkins для django проекта с нуля

Django*
Всем привет.

Значительное время в нашем проекте использовалась самописная система интеграционного тестирования — чекаут кода по хуку в системе контроля версий, прогонка тестов с поддержкой отчётов по покрытию кода, запись результатов в отдельный 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 и наслаждаться результатами:


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

Спасибо за внимание.
Tags:djangojenkinscicontinuous integration
Hubs: Django
Total votes 33: ↑31 and ↓2+29
Views53K
Comments Comments 18

Popular right now