SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Непрерывная интеграция
Python-проектов в Яндексе
Андрей Казаринов, разработчик
Python Party, Москва, 02.09.2015
〉Большое количество времени уходит на поддержание процесса
разработки (тестирование, сборка релиза, выкладка)
〉Чем позже найден баг, тем он дороже
3
Проблема
Решение – автоматизация
〉Частые релизы (2-3 раза в неделю) + хотфиксы
〉До 10 одновременных разработчиков проекта
〉Много подпроектов, микросервисов, библиотек, пакетов (>20)
〉Много зависимостей, включая бинарные (10-50)
〉Несколько окружений (development, testing, prestable, production)
〉Большое количество серверов (10-100)
〉Разные платформы (lucid, precise, trusty)
〉Debian-пакеты
4
Условия
〉Каждое изменение должно интегрироваться
〉Тесты
〉Быстрая сборка (<10 минут)
〉Интеграция на выделенной машине
5
Принципы непрерывной интеграции
Решение
〉«Собираем всех в одно гнездо» – все разработчики и проекты
разрабатываются на одной dev-машине
〉«Virtualenv в каждый дом»
〉«Береги код смолоду» (pep8, flake8, … )
〉«Trust but check» – GitHub Enterprise, pull requests, code review
7
Разработка
〉Unit-тесты (>10к тестов в одном из проектов) – unittest2, nose, pytest
〉Code coverage (в среднем 70-80%)
〉Моки внешних сервисов
〉Приемочные тесты пишутся тестировщиками
〉Ручное тестирование отдельных компонент
8
Тестирование
〉Pbuilder – изоляция окружения сборки пакета
〉Сборка debian-пакета – распространение кода
〉Cобираем virtualenv и кладем его в debian-пакет – изоляция
python-зависимостей
〉Кэшируем Python Wheels – ускорение сборки
〉Python-библиотеки загружаем на внутренний PyPI –
 переиспользование кода
9
Пакетирование
sudo pbuilder --login --save-after-login —basetgz <путь до образа>
apt-get update
cd <project path>
debuild
virtualenv --system-site-packages <env-dir>
. <env-dir>/bin/activate
pip wheel -w “/tmp/wheels” -f “/tmp/.cache/wheels" -r requirements.txt
pip install --use-wheel --no-index -f "/tmp/.cache/wheels" -r requirements.txt
py.test --cov <module> tests
10
Процесс пакетирования
〉Созданное окружение в pbuilder уничтожается
〉Прокидываем директории для кэша из системы при инициализации
образа
.pbuilderrc
BINDMOUNTS=<path to cache>
HOOKDIR=<path to hooks>
11
Хитрости кэширование Python Wheels
〉TeamCity
〉Агенты для проекта и есть общий пул агентов
〉Шаблоны сборок
〉Интеграция с GitHub
〉Conductor – установка пакета на сервера (внутренний продукт)
12
Система непрерывной интеграции
13
TeamCity
14
Агенты
15
Шаблоны сборок
16
Интеграция с GitHub
17
Интеграция с GitHub
18
Conductor
19
Conductor
20
Conductor
1. Сборка пакета
1. Создание изолированного окружения
2. Сборка virtualenv с тестовыми утилитами
3. Тестирование с coverage
4. Сборка продакшен virtualenv
2. Публикация результатов coverage в GitHub (в pull request)
3. Загрузка debian-пакета на внутренний debian-репозиторий
4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки) 
5. Тикет в систему деплоя пакетов (Conductor)
21
Шаги
22
Публикация результатов coverage в GitHub
23
Публикация результатов coverage в GitHub
24
Внутренний PyPI
25
Conductor
Результаты
〉Выявление багов на раннем этапе – дешевле разработка
〉Частые релизы – ускоренный feedback
〉Аккуратный однотипный код – легче поддерживать
27
Для менеджеров
〉На одной машине могут стоять пакеты с зависимостями различных
версий (virtualenv)
〉Пакет собирается в окружении близком к production (pbuilder)
〉Легко создавать новые сборки (унифицикация сборок, шаблоны)
〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels)
28
Для разработчиков
Спасибо за внимание!
Андрей Казаринов
Разработчик
Контакты
andrey.kazarinovairjordan@yandex-team.ru

Más contenido relacionado

La actualidad más candente

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupBadoo Development
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control GroupsOSLL
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantDaria Oreshkina
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыDrupalSib
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиAndrey Markelov
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасRuslan Sharipov
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanesPavel Emelyanov
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революцияGetDev.NET
 
Continuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаContinuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаPavel Filonov
 
Continuous Integration for C++ engineers
Continuous Integration for C++ engineersContinuous Integration for C++ engineers
Continuous Integration for C++ engineerscorehard_by
 
Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)OSLL
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используютITCrowd Almaty
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerAndrey Markelov
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ciАлександр Сигачев
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Fwdays
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере GitSCINO
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Badoo Development
 
Yet Another PaaS
Yet Another PaaSYet Another PaaS
Yet Another PaaSProvectus
 
Тестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на DockerТестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на DockerAnton Maksimov
 

La actualidad más candente (20)

Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps MeetupДоклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
Доклад "Docker в Badoo: от восторгов к внедрению" на DevOps Meetup
 
Обзор Linux Control Groups
Обзор Linux Control GroupsОбзор Linux Control Groups
Обзор Linux Control Groups
 
Антон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с VagrantАнтон Каляев — Быстрое развертывание среды с Vagrant
Антон Каляев — Быстрое развертывание среды с Vagrant
 
Андрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание средыАндрей Михайлов. Vagrant. Быстрое развертывание среды
Андрей Михайлов. Vagrant. Быстрое развертывание среды
 
OpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельностиOpenStack и Docker: вместе и по отдельности
OpenStack и Docker: вместе и по отдельности
 
Docker 1.9
Docker 1.9Docker 1.9
Docker 1.9
 
Депрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчасДепрокрастинируем Docker: контейнеры здесь и сейчас
Депрокрастинируем Docker: контейнеры здесь и сейчас
 
Teach your dockers to use CRanes
Teach your dockers to use CRanesTeach your dockers to use CRanes
Teach your dockers to use CRanes
 
Docker контейнерная революция
Docker контейнерная революцияDocker контейнерная революция
Docker контейнерная революция
 
Continuous Integration для C++ разработчика
Continuous Integration для C++ разработчикаContinuous Integration для C++ разработчика
Continuous Integration для C++ разработчика
 
Continuous Integration for C++ engineers
Continuous Integration for C++ engineersContinuous Integration for C++ engineers
Continuous Integration for C++ engineers
 
Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)Пространства имен Linux (linux namespaces)
Пространства имен Linux (linux namespaces)
 
Docker с чем едят и для чего используют
Docker с чем едят и для чего используютDocker с чем едят и для чего используют
Docker с чем едят и для чего используют
 
RHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и DockerRHEL 7. Контейнеры и Docker
RHEL 7. Контейнеры и Docker
 
Процесс разработки и тестирования с Docker + gitlab ci
Процесс разработки и тестирования с  Docker + gitlab ciПроцесс разработки и тестирования с  Docker + gitlab ci
Процесс разработки и тестирования с Docker + gitlab ci
 
Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков" Михаил Боднарчук "Docker для PHP разработчиков"
Михаил Боднарчук "Docker для PHP разработчиков"
 
Scino: DVCS на примере Git
Scino: DVCS на примере GitScino: DVCS на примере Git
Scino: DVCS на примере Git
 
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
Внедрение Docker в процесс разработки демонов. Доклад Константина Карпова на ...
 
Yet Another PaaS
Yet Another PaaSYet Another PaaS
Yet Another PaaS
 
Тестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на DockerТестовый стенд для большого числа проектов на Docker
Тестовый стенд для большого числа проектов на Docker
 

Similar a Непрерывная интеграция Python-проектов в Яндексе

Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в ЯндексеAndrey Kazarinov
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandexaviatakz
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funAlexandr Khotemskoy
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in productionAnatoly Popov
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Yandex
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Ontico
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыOleg Nenashev
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...MskDotNet Community
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéInterSystems CEE
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergrationInterSystems
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerPositive Hack Days
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practicesIgor Kurochkin
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложенияDenis Latushkin
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliverySQALab
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QAFest
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...Provectus
 

Similar a Непрерывная интеграция Python-проектов в Яндексе (20)

Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 
Python Development process in Yandex
Python Development process in YandexPython Development process in Yandex
Python Development process in Yandex
 
WebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double funWebdriverIO + Puppeteer. Double gun – double fun
WebdriverIO + Puppeteer. Double gun – double fun
 
Wgforge CI/CD
Wgforge CI/CDWgforge CI/CD
Wgforge CI/CD
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
Legacy в коробочке. Dev-среда на базе Kubernetes / Илья Сауленко (Avito)
 
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемыMoscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
Moscow Jenkins Meetup #1. Pipeline для инженеров. Обзор экосистемы
 
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
Кирилл Ветчинкин Практика использования .NET Core на ОС Linux с применением а...
 
It meetup cd
It meetup cdIt meetup cd
It meetup cd
 
Приемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на CachéПриемы Сontinuous Integration при разработке приложений на Caché
Приемы Сontinuous Integration при разработке приложений на Caché
 
Caché github continuous intergration
Caché github continuous intergrationCaché github continuous intergration
Caché github continuous intergration
 
Как мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows DockerКак мы собираем проекты в выделенном окружении в Windows Docker
Как мы собираем проекты в выделенном окружении в Windows Docker
 
Puppet development kit and best practices
Puppet development kit and best practicesPuppet development kit and best practices
Puppet development kit and best practices
 
NPM и модульная архитектура приложения
NPM и модульная архитектура приложенияNPM и модульная архитектура приложения
NPM и модульная архитектура приложения
 
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
SECON'2017, Кулагин Егор, Непрерывное развертывание. Конвейер здорового челов...
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous DeliveryJenkins 2.0: Организуем тестирование в составе Continuous Delivery
Jenkins 2.0: Организуем тестирование в составе Continuous Delivery
 
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
QA Fest 2019. Александр Хотемской. WebdriverIO + Puppeteer. Double gun - doub...
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 

Непрерывная интеграция Python-проектов в Яндексе

  • 1.
  • 2. Непрерывная интеграция Python-проектов в Яндексе Андрей Казаринов, разработчик Python Party, Москва, 02.09.2015
  • 3. 〉Большое количество времени уходит на поддержание процесса разработки (тестирование, сборка релиза, выкладка) 〉Чем позже найден баг, тем он дороже 3 Проблема Решение – автоматизация
  • 4. 〉Частые релизы (2-3 раза в неделю) + хотфиксы 〉До 10 одновременных разработчиков проекта 〉Много подпроектов, микросервисов, библиотек, пакетов (>20) 〉Много зависимостей, включая бинарные (10-50) 〉Несколько окружений (development, testing, prestable, production) 〉Большое количество серверов (10-100) 〉Разные платформы (lucid, precise, trusty) 〉Debian-пакеты 4 Условия
  • 5. 〉Каждое изменение должно интегрироваться 〉Тесты 〉Быстрая сборка (<10 минут) 〉Интеграция на выделенной машине 5 Принципы непрерывной интеграции
  • 7. 〉«Собираем всех в одно гнездо» – все разработчики и проекты разрабатываются на одной dev-машине 〉«Virtualenv в каждый дом» 〉«Береги код смолоду» (pep8, flake8, … ) 〉«Trust but check» – GitHub Enterprise, pull requests, code review 7 Разработка
  • 8. 〉Unit-тесты (>10к тестов в одном из проектов) – unittest2, nose, pytest 〉Code coverage (в среднем 70-80%) 〉Моки внешних сервисов 〉Приемочные тесты пишутся тестировщиками 〉Ручное тестирование отдельных компонент 8 Тестирование
  • 9. 〉Pbuilder – изоляция окружения сборки пакета 〉Сборка debian-пакета – распространение кода 〉Cобираем virtualenv и кладем его в debian-пакет – изоляция python-зависимостей 〉Кэшируем Python Wheels – ускорение сборки 〉Python-библиотеки загружаем на внутренний PyPI –  переиспользование кода 9 Пакетирование
  • 10. sudo pbuilder --login --save-after-login —basetgz <путь до образа> apt-get update cd <project path> debuild virtualenv --system-site-packages <env-dir> . <env-dir>/bin/activate pip wheel -w “/tmp/wheels” -f “/tmp/.cache/wheels" -r requirements.txt pip install --use-wheel --no-index -f "/tmp/.cache/wheels" -r requirements.txt py.test --cov <module> tests 10 Процесс пакетирования
  • 11. 〉Созданное окружение в pbuilder уничтожается 〉Прокидываем директории для кэша из системы при инициализации образа .pbuilderrc BINDMOUNTS=<path to cache> HOOKDIR=<path to hooks> 11 Хитрости кэширование Python Wheels
  • 12. 〉TeamCity 〉Агенты для проекта и есть общий пул агентов 〉Шаблоны сборок 〉Интеграция с GitHub 〉Conductor – установка пакета на сервера (внутренний продукт) 12 Система непрерывной интеграции
  • 21. 1. Сборка пакета 1. Создание изолированного окружения 2. Сборка virtualenv с тестовыми утилитами 3. Тестирование с coverage 4. Сборка продакшен virtualenv 2. Публикация результатов coverage в GitHub (в pull request) 3. Загрузка debian-пакета на внутренний debian-репозиторий 4. Загрузка python-пакета на внутренний PyPI (в случае библиотеки)  5. Тикет в систему деплоя пакетов (Conductor) 21 Шаги
  • 27. 〉Выявление багов на раннем этапе – дешевле разработка 〉Частые релизы – ускоренный feedback 〉Аккуратный однотипный код – легче поддерживать 27 Для менеджеров
  • 28. 〉На одной машине могут стоять пакеты с зависимостями различных версий (virtualenv) 〉Пакет собирается в окружении близком к production (pbuilder) 〉Легко создавать новые сборки (унифицикация сборок, шаблоны) 〉Быстрая сборка пакета (до 10 минут) (кэширования Python Wheels) 28 Для разработчиков