6. Сломавшийся
сервер
1. Плановая
перезагрузка
2. Сервер
не
подымается
3. В
23
часа
начинаем
перенос
4. В
4
утра
он
все
еще
идет
5. Утром
с
10
продолжаем
7. Что
там
было?
1. 10-‐15
скриптов
в
cron
2. у
каждого
скрипта
свой
набор
ключей
3. 2
ключевых
сервиса
4. все
настройки
умерли
вместе
с
сервером
9. • Десятки
и
сотни
единиц
оборудования
• Процесс
первоначальной
настройки:
– Загружаемся
с
диска
– Переставляем
диск
с
образом
– Записываем
– Правим
3
параметра
в
системе
• Сколько
раз
я
ошибся
в
IP-‐адресах?
• Сколько
это
занимало
времени?
• И
это
только
настройка
OS
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
11. И
еще…
• Патч
в
gem
$dy,
который
делали
руками
• Размер
блока
в
md-‐устройстве
• PostgreSQL
мастер
на
Linux,
слейв
–
FreeBSD
• Выкатка
через
chef/capistrano
• Версии
PostgreSQL
9.0
–
на
stage,
9.1
в
бою
14. Принципы
• Создать
повторяемый
и
надежный
процесс
поставки
ПО
• Автоматизировать
все,
что
можно
• Хранить
все
в
системе
контроля
версий
• Совершенствоваться
через
повторения
• Получать
раннюю
обратную
связь
15. продолжение…
• Встроенный
контроль
качества
• Выполнено,
значит
зарелизилось
• Каждый
отвечает
за
процесс
поставки
ПО
• Непрерывные
улучшения
26. • OS
(версия,
образ)
• Список
установленных
пакетов
(с
версиями)
• Настройки
системы
• Библиотеки
приложения
27. Образ
системы
• Kiwi
h•p://opensuse.github.com/kiwi/
• Cobbler
h•p://cobbler.github.com/
• Spacewalk
h•p://spacewalk.redhat.com/
28. Пакеты
OBS
-‐
Open
Build
Service
h•ps://build.opensuse.org/
29. Системы
управления
конфигурацией
• Chef
h•p://www.opscode.com/chef/
• Puppet
h•ps://puppetlabs.com/puppet/puppet-‐open-‐
source/
• CFEngine
• Salt
30. Функции
• Устанавливать
нужные
пакеты
• Следить
за
файлами
конфигурации
• Запускать
и
перезапускать
сервисы
• Интеграция
компонет
37. При
каждом
изменении:
• проект
забирается
из
СКВ
• проект
собирается
• прогоняются
тесты
• проходит
выкатка
на
тестовый
стенд
(?)
• рассылаются
оповещения
42. • создайте
хорошее
покрытие
автоматическими
тестами
• сохраняйте
время
сборки
и
выполнения
тестов
небольшим
• не
вносите
изменений,
когда
сборка
сломана
• прогоняйте
тесты
локально
перед
внесением
изменений
43. • подождите
прохождения
тестов,
а
потом
продолжайте
работу
• не
уходите
домой,
если
сборка
сломана
• будьте
готовы
откатить
изменения
• не
комментируйте
сломавшиеся
тесты
• берите
на
себя
ответственность
за
свои
изменения
• пишите
тесты
перед
кодом
(TDD)