Иван Евтухович — Как перестать релизиться и начать...

49
Con$nuous Delivery как перестать релизиться и начать жить Иван Евтухович SECON’ 2013

Upload: daria-oreshkina

Post on 04-Jul-2015

704 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Иван Евтухович — Как перестать релизиться и начать жить

Con$nuous  Delivery  как  перестать  релизиться  и    

начать  жить  

Иван  Евтухович    

SECON’  2013  

Page 2: Иван Евтухович — Как перестать релизиться и начать жить
Page 3: Иван Евтухович — Как перестать релизиться и начать жить

План  доклада  

•  Неудачные  истории  из  жизни  •  Принципы  непрерывной  поставки  ПО  •  Управление  конфигурацией  •  Непрерывная  интеграция  •  Тестирование    

Page 4: Иван Евтухович — Как перестать релизиться и начать жить
Page 5: Иван Евтухович — Как перестать релизиться и начать жить

Неудачные  истории    из  жизни  

Page 6: Иван Евтухович — Как перестать релизиться и начать жить

Сломавшийся  сервер  

1.  Плановая  перезагрузка  2.  Сервер  не  подымается  3.  В  23  часа  начинаем  перенос  4.  В  4  утра  он  все  еще  идет  5.  Утром  с  10  продолжаем  

Page 7: Иван Евтухович — Как перестать релизиться и начать жить

Что  там  было?  

1.  10-­‐15  скриптов  в  cron  2.  у  каждого  скрипта  свой  набор  ключей  3.  2  ключевых  сервиса  4.  все  настройки  умерли  вместе  с  сервером  

Page 8: Иван Евтухович — Как перестать релизиться и начать жить

Много  оборудования  

Page 9: Иван Евтухович — Как перестать релизиться и начать жить

•  Десятки  и  сотни  единиц  оборудования  •  Процесс  первоначальной  настройки:  – Загружаемся  с  диска  – Переставляем  диск  с  образом  – Записываем  – Правим  3  параметра  в  системе  

•  Сколько  раз  я  ошибся  в  IP-­‐адресах?  •  Сколько  это  занимало  времени?  •  И  это  только  настройка  OS  

Page 10: Иван Евтухович — Как перестать релизиться и начать жить

Ошибки  в  конфигурации  

•  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: Иван Евтухович — Как перестать релизиться и начать жить

И  еще…  

•  Патч  в  gem  $dy,  который  делали  руками  •  Размер  блока  в  md-­‐устройстве  •  PostgreSQL  мастер  на  Linux,  слейв  –  FreeBSD  •  Выкатка  через  chef/capistrano  •  Версии  PostgreSQL  9.0  –  на  stage,  9.1  в  бою  

Page 12: Иван Евтухович — Как перестать релизиться и начать жить

Опрос  

Page 13: Иван Евтухович — Как перестать релизиться и начать жить

Как  предотвратить  подобные  ситуации?  

Page 14: Иван Евтухович — Как перестать релизиться и начать жить

Принципы  

•  Создать  повторяемый  и  надежный  процесс  поставки  ПО  

•  Автоматизировать  все,  что  можно  •  Хранить  все  в  системе  контроля  версий  •  Совершенствоваться  через  повторения  •  Получать  раннюю  обратную  связь    

Page 15: Иван Евтухович — Как перестать релизиться и начать жить

продолжение…  

•  Встроенный  контроль  качества  •  Выполнено,  значит  зарелизилось  •  Каждый  отвечает  за  процесс  поставки  ПО  •  Непрерывные  улучшения  

Page 16: Иван Евтухович — Как перестать релизиться и начать жить

Преимущества  

•  Понижение  стресса  •  Уменьшение  ошибок  •  Помощь  команде  •  Гибкость  выкатки  

Page 17: Иван Евтухович — Как перестать релизиться и начать жить

Сколько  времени  нужно,  чтобы    строчка  кода  попала  в  релиз?  

 

Сколько  времени  вам  надо,  чтобы  развернуть  ваше  приложение?  

Page 18: Иван Евтухович — Как перестать релизиться и начать жить

Конвейер  

Page 19: Иван Евтухович — Как перестать релизиться и начать жить

Среда  разработки  

CI  

QA  

Staging  

Produc$on  

Page 20: Иван Евтухович — Как перестать релизиться и начать жить

DevOps  

•  Разработчики  и  QA  –  враги  •  QA  и  админы  –  враги  •  Разработчики  и  админы  –  враги  •  Это  неправда!  

Page 21: Иван Евтухович — Как перестать релизиться и начать жить

Управление    конфигурацией  

Page 22: Иван Евтухович — Как перестать релизиться и начать жить

Как  хранить  конфигурацию?  

Хранить  образы  всех  серверов    Минусы:  – изменение  в  образе  и  на  сервере  – отсутствие  контроля  (кто  и  когда)  

Page 23: Иван Евтухович — Как перестать релизиться и начать жить

Что  такое  конфигурация?  

Page 24: Иван Евтухович — Как перестать релизиться и начать жить

Что  ценно  на  сервере?  

На  боевом  сервере  размер  папки  /usr  730  Мб  

 Дороги  ли  мне  эти  данные?  

Page 25: Иван Евтухович — Как перестать релизиться и начать жить

Минимальное  количество  данных,  необходимое  для  того,  чтобы  

повторяемо  воспроизводить  среду  

Page 26: Иван Евтухович — Как перестать релизиться и начать жить

•  OS  (версия,  образ)  •  Список  установленных  пакетов  (с  версиями)  •  Настройки  системы  •  Библиотеки  приложения  

Page 27: Иван Евтухович — Как перестать релизиться и начать жить

Образ  системы  

•  Kiwi  h�p://opensuse.github.com/kiwi/  •  Cobbler  h�p://cobbler.github.com/  •  Spacewalk  h�p://spacewalk.redhat.com/  

Page 28: Иван Евтухович — Как перестать релизиться и начать жить

Пакеты  

OBS  -­‐  Open  Build  Service  h�ps://build.opensuse.org/  

 

Page 29: Иван Евтухович — Как перестать релизиться и начать жить

Системы  управления  конфигурацией  

•  Chef  h�p://www.opscode.com/chef/  •  Puppet  h�ps://puppetlabs.com/puppet/puppet-­‐open-­‐source/  

•  CFEngine  •  Salt  

Page 30: Иван Евтухович — Как перестать релизиться и начать жить

Функции  

•  Устанавливать  нужные  пакеты  •  Следить  за  файлами  конфигурации  •  Запускать  и  перезапускать  сервисы  •  Интеграция  компонет    

Page 31: Иван Евтухович — Как перестать релизиться и начать жить

Opscode  Chef  

Chef  сервер  

db01   web01   web02  

Page 32: Иван Евтухович — Как перестать релизиться и начать жить

Выкатка  

•  Повторяема  •  Полностью  автоматизирована  •  Независима  от  локальных  настроек  •  Независимые  релизы  (и  конфигурация)  •  Откат  отрепетирован  •  Например:  capistrano,  fabric  

Page 33: Иван Евтухович — Как перестать релизиться и начать жить

Библиотеки  приложения  

•  Maven  для  Java  •  Bundler  для  Ruby  •  Virtualenv/pip  для  Python  

Page 34: Иван Евтухович — Как перестать релизиться и начать жить

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: Иван Евтухович — Как перестать релизиться и начать жить

При  этом  настройки  Cobbler,  OBS,  Chef,  Bundler  лежат  в    системе  контроля  версий  

 

Page 36: Иван Евтухович — Как перестать релизиться и начать жить

Непрерывная  интеграция  

(Con$nuous  Integra$on)  

Page 37: Иван Евтухович — Как перестать релизиться и начать жить

При  каждом  изменении:  

•  проект  забирается  из  СКВ  •  проект  собирается  •  прогоняются  тесты  •  проходит  выкатка  на  тестовый  стенд  (?)  •  рассылаются  оповещения    

Page 38: Иван Евтухович — Как перестать релизиться и начать жить

•  CruiseControl  (CruiseControl.rb)  •  Jenkins  •  TeamCity  от  JetBrains  •  TravisCI  

Page 39: Иван Евтухович — Как перестать релизиться и начать жить

Проблема  в  людях  

Page 40: Иван Евтухович — Как перестать релизиться и начать жить

Практики    

Page 41: Иван Евтухович — Как перестать релизиться и начать жить

Делайте  коммиты  часто  

Page 42: Иван Евтухович — Как перестать релизиться и начать жить

•  создайте  хорошее  покрытие  автоматическими  тестами  

•  сохраняйте  время  сборки  и  выполнения  тестов  небольшим  

•  не  вносите  изменений,  когда  сборка  сломана  

•  прогоняйте  тесты  локально  перед  внесением  изменений  

 

Page 43: Иван Евтухович — Как перестать релизиться и начать жить

•  подождите  прохождения  тестов,  а  потом  продолжайте  работу  

•  не  уходите  домой,  если  сборка  сломана  •  будьте  готовы  откатить  изменения  •  не  комментируйте  сломавшиеся  тесты  •  берите  на  себя  ответственность  за  свои  изменения  

•  пишите  тесты  перед  кодом  (TDD)    

Page 44: Иван Евтухович — Как перестать релизиться и начать жить

Тестирование  

Page 45: Иван Евтухович — Как перестать релизиться и начать жить

Автоматические      

Приемочные    тесты  

   

Ручные      

Показы  

Юзабилити      

 

Юнит  тесты  

Интеграционные  

Выкатка    

Автоматические  

 

Нагрузочные  

Безопасности      

Ручные/Автоматические  

Бизнес  

Технологии  

Подд

ержка

  Критика  

Page 46: Иван Евтухович — Как перестать релизиться и начать жить

Готовых  рецептов  нет  

• Думайте  • Измеряйте  •  Экспериментируйте  

Page 47: Иван Евтухович — Как перестать релизиться и начать жить

Что  почитать?  

Page 48: Иван Евтухович — Как перестать релизиться и начать жить

•  con$nuousdelivery.com    

Page 49: Иван Евтухович — Как перестать релизиться и начать жить

Спасибо  за  внимание!  Вопросы  и  ответы  

   

[email protected]  Twi�er:  evtuhovich  

h�p://blog.evtuhovich.ru/