Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как мы делаем раскладку Календаря@Mail.Ru

Как мы делаем раскладку Календаря@Mail.Ru

Владимир Рудных

Буквально на днях мы запустили Календарь Mail.Ru, написанный на Python. На встрече я расскажу, как мы организовали раскладку проекта на Django в бой, какой путь проходит код от коммита в git до появления его на боевых серверах, как мы отслеживаем результаты нашей работы и понимаем, что раскладка прошла успешно.

Avatar for Moscow Python Meetup

Moscow Python Meetup

November 21, 2012
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Moscow Django MeetUp №7 Обо мне • тимлид Календаря Mail.Ru

    • pythonista • бывший перловик • ленивый программист
  2. Moscow Django MeetUp №7 Календарь Mail.Ru • calendar.mail.ru • написан

    на Python • Django framework • PostgreSQL • Rich Internet Application • RESTful API • шаблонизация на клиенте (Fest)
  3. Moscow Django MeetUp №7 Ахаха, мы же не перловики! Раскладка

    проекта серверы серверы репозиторий git много серверов "rsync" ?
  4. Moscow Django MeetUp №7 Раскладка проекта • python setup.py install

    • pip install package • pip install -r requirements.txt
  5. Moscow Django MeetUp №7 Загаживать систему пакетами? Что делать с

    зависимостями? Как отслеживать их версии? Раскладка проекта
  6. Moscow Django MeetUp №7 А если нужна другая версия Python?

    А что делать, если нужно откатиться? Что делать с зависимостями при откате? Раскладка проекта
  7. Moscow Django MeetUp №7 Vitrualenv • весь проект в одном

    месте • со всеми зависимостями • любые версии Python и модулей • не засоряет систему
  8. Moscow Django MeetUp №7 Но как раскладывать? Makefile? Fabric? RPM*!

    Раскладка проекта * RPM, DEB или любой другой формат пакетов
  9. Moscow Django MeetUp №7 RPM • весь проект со всеми

    зависимостями • в одном пакете • накатить/откатить - без проблем • версионность пакетов • версионность отдельных модулей • не засоряет систему • админы умеют (привет, CPAN!)
  10. Moscow Django MeetUp №7 сборка RPM • пишем fabfile для

    запуска сборки • пишем SPEC-файл для RPM • заводим задачу в Jenkins CI • ... • пушим ветку в git, получаем RPM: - git master -> RPM stable - git prerelease -> RPM testing
  11. Moscow Django MeetUp №7 Jenkins CI Задачи в Jenkins: •

    development - все ветки • prerelease - ветка prerelease • release - ветка master
  12. Moscow Django MeetUp №7 плюшки Jenkins • автоматическая сборка RPM

    • continuous integration • тесты • lint • coverage • change log • мгновенная обратная связь
  13. Moscow Django MeetUp №7 Jenkins jobs dev prerelease release pylint

    ✔ flake8 ✔ ✔ coverage ✔ ✔ tests ✔ ✔ ✔ RPM ✔ ✔
  14. Moscow Django MeetUp №7 Разложили, что дальше? Как узнать, что

    всё хорошо? Нужен мониторинг! Раскладка проекта
  15. Moscow Django MeetUp №7 Мониторинг • метрики в Graphite (+Statsd)

    • ошибки в Sentry • дежурные администраторы • обращения пользователей в службу поддержки
  16. Moscow Django MeetUp №7 Graphite • количество запросов • тип

    запросов • время выполнения • время ожидания • таймауты • количество ошибок • выкладки и рестарты
  17. Moscow Django MeetUp №7 Graphite • клиент (браузер) • сервер

    (cpu, memory, hardware) • nginx • uwsgi • приложение • БД • обвязка (очереди, рассыльщики)
  18. Moscow Django MeetUp №7 Sentry • url ошибки • данные

    запроса (request) • полный stacktrace ошибки • версии модулей • информация о пользователе (email, браузер, ОС) Для каждой ошибки!
  19. Moscow Django MeetUp №7 Тестирование • модульное • функциональное •

    регрессионное • альфа (тестировщики) • бета (пользователи)
  20. Moscow Django MeetUp №7 Code review • подписка на коммиты

    (с фильтрами) • аудит и рецензирование коммитов • просмотр кода и diff’ов
  21. Moscow Django MeetUp №7 Best practice • пишем на Python

    • используем virtualenv • менеджеры пакетов ОС (RPM) • автоматизируем процесс (Jenkins) • мониторим всё и вся • тесты, тесты, тесты! • обратная совместимость кода • code review, code style + lint
  22. Moscow Django MeetUp №7 Ссылки • Virtualenv: virtualenv.org • Jenkins:

    jenkins-ci.org • Graphite: graphite.wikidot.com • Statsd: github.com/etsy/statsd • Sentry: getsentry.com • Phabricator: phabricator.org