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

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

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

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

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

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