Continuousdelivery
-
Upload
ivan-evtukhovich -
Category
Documents
-
view
495 -
download
1
Transcript of Continuousdelivery
![Page 1: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/1.jpg)
Con$nuous Delivery как перестать релизиться и
начать жить
Иван Евтухович
SECON’ 2013
![Page 2: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/2.jpg)
![Page 3: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/3.jpg)
План доклада
• Неудачные истории из жизни • Принципы непрерывной поставки ПО • Управление конфигурацией • Непрерывная интеграция • Тестирование
![Page 4: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/4.jpg)
![Page 5: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/5.jpg)
Неудачные истории из жизни
![Page 6: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/6.jpg)
Сломавшийся сервер
1. Плановая перезагрузка 2. Сервер не подымается 3. В 23 часа начинаем перенос 4. В 4 утра он все еще идет 5. Утром с 10 продолжаем
![Page 7: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/7.jpg)
Что там было?
1. 10-‐15 скриптов в cron 2. у каждого скрипта свой набор ключей 3. 2 ключевых сервиса 4. все настройки умерли вместе с сервером
![Page 8: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/8.jpg)
Много оборудования
![Page 9: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/9.jpg)
• Десятки и сотни единиц оборудования • Процесс первоначальной настройки: – Загружаемся с диска – Переставляем диск с образом – Записываем – Правим 3 параметра в системе
• Сколько раз я ошибся в IP-‐адресах? • Сколько это занимало времени? • И это только настройка OS
![Page 10: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/10.jpg)
Ошибки в конфигурации
• MySQL 5.0 на produc$on, 5.1 на stage • php без модуля и вызов @funcname • database pool size в многопоточном приложении
• Array.count в Ruby 1.8.7 (development) и 1.8.6 (produc$on)
• Патчи для Ruby во FreeBSD и Hpricot
![Page 11: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/11.jpg)
И еще…
• Патч в gem $dy, который делали руками • Размер блока в md-‐устройстве • PostgreSQL мастер на Linux, слейв – FreeBSD • Выкатка через chef/capistrano • Версии PostgreSQL 9.0 – на stage, 9.1 в бою
![Page 12: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/12.jpg)
Опрос
![Page 13: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/13.jpg)
Как предотвратить подобные ситуации?
![Page 14: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/14.jpg)
Принципы
• Создать повторяемый и надежный процесс поставки ПО
• Автоматизировать все, что можно • Хранить все в системе контроля версий • Совершенствоваться через повторения • Получать раннюю обратную связь
![Page 15: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/15.jpg)
продолжение…
• Встроенный контроль качества • Выполнено, значит зарелизилось • Каждый отвечает за процесс поставки ПО • Непрерывные улучшения
![Page 16: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/16.jpg)
Преимущества
• Понижение стресса • Уменьшение ошибок • Помощь команде • Гибкость выкатки
![Page 17: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/17.jpg)
Сколько времени нужно, чтобы строчка кода попала в релиз?
Сколько времени вам надо, чтобы развернуть ваше приложение?
![Page 18: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/18.jpg)
Конвейер
![Page 19: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/19.jpg)
Среда разработки
CI
QA
Staging
Produc$on
![Page 20: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/20.jpg)
DevOps
• Разработчики и QA – враги • QA и админы – враги • Разработчики и админы – враги • Это неправда!
![Page 21: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/21.jpg)
Управление конфигурацией
![Page 22: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/22.jpg)
Как хранить конфигурацию?
Хранить образы всех серверов Минусы: – изменение в образе и на сервере – отсутствие контроля (кто и когда)
![Page 23: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/23.jpg)
Что такое конфигурация?
![Page 24: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/24.jpg)
Что ценно на сервере?
На боевом сервере размер папки /usr 730 Мб
Дороги ли мне эти данные?
![Page 25: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/25.jpg)
Минимальное количество данных, необходимое для того, чтобы
повторяемо воспроизводить среду
![Page 26: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/26.jpg)
• OS (версия, образ) • Список установленных пакетов (с версиями) • Настройки системы • Библиотеки приложения
![Page 27: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/27.jpg)
Образ системы
• Kiwi h�p://opensuse.github.com/kiwi/ • Cobbler h�p://cobbler.github.com/ • Spacewalk h�p://spacewalk.redhat.com/
![Page 28: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/28.jpg)
Пакеты
OBS -‐ Open Build Service h�ps://build.opensuse.org/
![Page 29: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/29.jpg)
Системы управления конфигурацией
• Chef h�p://www.opscode.com/chef/ • Puppet h�ps://puppetlabs.com/puppet/puppet-‐open-‐source/
• CFEngine • Salt
![Page 30: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/30.jpg)
Функции
• Устанавливать нужные пакеты • Следить за файлами конфигурации • Запускать и перезапускать сервисы • Интеграция компонет
![Page 31: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/31.jpg)
Opscode Chef
Chef сервер
db01 web01 web02
![Page 32: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/32.jpg)
Выкатка
• Повторяема • Полностью автоматизирована • Независима от локальных настроек • Независимые релизы (и конфигурация) • Откат отрепетирован • Например: capistrano, fabric
![Page 33: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/33.jpg)
Библиотеки приложения
• Maven для Java • Bundler для Ruby • Virtualenv/pip для Python
![Page 34: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/34.jpg)
Bundler source 'h�p://rubygems.org’ gem 'rails', '3.1.10’ gem 'pg’ gem 'nokogiri' gem 'haml' gem 'devise', '1.5.0' gem 'russian', '~> 0.6.0' gem 'simple_form', '1.5.2' gem 'state_machine' gem 'globalize3', "~> 0.2.0.beta4”
![Page 35: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/35.jpg)
При этом настройки Cobbler, OBS, Chef, Bundler лежат в системе контроля версий
![Page 36: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/36.jpg)
Непрерывная интеграция
(Con$nuous Integra$on)
![Page 37: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/37.jpg)
При каждом изменении:
• проект забирается из СКВ • проект собирается • прогоняются тесты • проходит выкатка на тестовый стенд (?) • рассылаются оповещения
![Page 38: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/38.jpg)
• CruiseControl (CruiseControl.rb) • Jenkins • TeamCity от JetBrains • TravisCI
![Page 39: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/39.jpg)
Проблема в людях
![Page 40: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/40.jpg)
Практики
![Page 41: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/41.jpg)
Делайте коммиты часто
![Page 42: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/42.jpg)
• создайте хорошее покрытие автоматическими тестами
• сохраняйте время сборки и выполнения тестов небольшим
• не вносите изменений, когда сборка сломана
• прогоняйте тесты локально перед внесением изменений
![Page 43: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/43.jpg)
• подождите прохождения тестов, а потом продолжайте работу
• не уходите домой, если сборка сломана • будьте готовы откатить изменения • не комментируйте сломавшиеся тесты • берите на себя ответственность за свои изменения
• пишите тесты перед кодом (TDD)
![Page 44: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/44.jpg)
Тестирование
![Page 45: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/45.jpg)
Автоматические
Приемочные тесты
Ручные
Показы
Юзабилити
Юнит тесты
Интеграционные
Выкатка
Автоматические
Нагрузочные
Безопасности
Ручные/Автоматические
Бизнес
Технологии
Подд
ержка
Критика
![Page 46: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/46.jpg)
Готовых рецептов нет
• Думайте • Измеряйте • Экспериментируйте
![Page 47: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/47.jpg)
Что почитать?
![Page 48: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/48.jpg)
• con$nuousdelivery.com
![Page 49: Continuousdelivery](https://reader033.fdocuments.us/reader033/viewer/2022060119/558e9e051a28ab60528b468f/html5/thumbnails/49.jpg)
Спасибо за внимание! Вопросы и ответы
[email protected] Twi�er: evtuhovich
h�p://blog.evtuhovich.ru/