Slide 1

Slide 1 text

Continuous integration и Django Илья Барышев Moscow Django Meetup #4

Slide 2

Slide 2 text

What is CI? A software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Martin Fowler

Slide 3

Slide 3 text

Зачем нужен CI • сокращается время интеграции • защита от регрессий • всегда работающая копия проекта • качественная оценка кода (lint)

Slide 4

Slide 4 text

• Free, MIT Licence • java  -­‐jar  jenkins.war • WebGUI • Богатый функционал out of the box • Более 400 плагинов

Slide 5

Slide 5 text

Jenkins dashboard http://ci.django-cms.org/

Slide 6

Slide 6 text

django-jenkins • простая установка и настройка • тестируем только свои приложения • поддержка анализаторов кода: • coverage • pylint, pep8, pyflakes • csslint, jslint и др.

Slide 7

Slide 7 text

Тестовый проект https://github.com/coagulant/jenkins_demo pip  install  django==1.4 django-­‐admin.py  \        startproject  jenkins_demo  . django-­‐admin.py  \        startapp  meetup jenkins_demo/        __init__.py        settings.py        urls.py        wsgi.py meetup/        __init__.py        models.py        tests.py        views.py manage.py

Slide 8

Slide 8 text

Тесты django $  python  manage.py  test Creating  test  database  for  alias  'default'... .................................................................... .................................................................... .................................................................... .................................................................... .................................................................... ...s................................................................ ........ -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ -­‐-­‐ Ran  416  tests  in  16.872s OK  (skipped=1) Destroying  test  database  for  alias  'default'...

Slide 9

Slide 9 text

Настраиваем django-jenkins pip  install  django-­‐jenkins  coverage  pylint INSTALLED_APPS  =  (        ...        'meetup',        'django_jenkins',        ... ) PROJECT_APPS  =  (        'meetup', )

Slide 10

Slide 10 text

Тесты django-jenkins $  python  manage.py  jenkins Creating  test  database  for  alias  'default'... . -­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐ Ran  1  test  in  0.004s OK Destroying  test  database  for  alias  'default'...

Slide 11

Slide 11 text

Ставим Jenkins и плагины Устанавливаем плагины Violations и Cobertura для Jenkins $  wget  http://mirrors.jenkins-­‐ci.org/war/latest/ jenkins.war $  java  -­‐jar  jenkins.war

Slide 12

Slide 12 text

Создание job Настраиваем сборку

Slide 13

Slide 13 text

Запускаем тесты

Slide 14

Slide 14 text

Запускаем тесты

Slide 15

Slide 15 text

Послесборочные операции

Slide 16

Slide 16 text

Так не бывает

Slide 17

Slide 17 text

Так бывает Покрытие Количество тестов

Slide 18

Slide 18 text

Shining Panda plug-in • поддержка python, virtualenv, buildout, tox при настройке заданий

Slide 19

Slide 19 text

Shining Panda plug-in • ось Python для многомерных конфигураций

Slide 20

Slide 20 text

Shining Panda • Jenkins SaaS • Python, Java • Linux, Windows • MySQL, PostgreSQL, MongoDB • 12$ в месяц (48c в час) • https://www.shiningpanda.com/

Slide 21

Slide 21 text

Travis CI • CI SaaS • Free for opensource • Python, Javascript, Ruby, etc (11 языков) • Интеграция с гитхабом • Тестирование pull-реквестов (beta) • http://travis-ci.org/

Slide 22

Slide 22 text

Travis dashboard

Slide 23

Slide 23 text

language:  python python:    -­‐  2.6    -­‐  2.7 env:    -­‐  DJANGO_VERSION=1.3.1    -­‐  DJANGO_VERSION=1.4 install:    -­‐  pip  install  -­‐q  Django==$DJANGO_VERSION      -­‐  pip  install  reqs.txt  -­‐-­‐use-­‐mirrors    -­‐  python  setup.py  -­‐q  install script:  python  runtests.py branches:    only:        -­‐  dev Пример .travis.yml

Slide 24

Slide 24 text

Полезные ссылочки • http://martinfowler.com/articles/continuousIntegration.html • http://jenkins-ci.org/ • https://github.com/kmmbvnr/django-jenkins • https://github.com/coagulant/jenkins_demo • https://www.shiningpanda.com/ • http://travis-ci.org/

Slide 25

Slide 25 text

Спасибо [email protected] @coagulant http://blog.futurecolors.ru/