Илья Фомин Готовим тестируемую инфраструктуру с Chef Align Technology, Inc.
Илья Фомин
Готовим тестируемую инфраструктуру с Chef
Align Technology, Inc.
© 2015 Align Technology, Inc. All rights reserved. 2
Обо мне
• Тестировщик
• Разработчик
• Сисадмин
• Менеджер
• В тестировании с 2006
• Align Technology, Inc. (NASDAQ:ALGN)
• Москва ---2013-–> Сан-Хосе (США)
Илья Фомин
• linkedin.com/in/fominfo
• @fom_info
Менеджер, Инструменты ДевОпс
Про инфраструктуру
© 2015 Align Technology, Inc. All rights reserved. 4
Инфраструктура
infra, лат. «ниже, под»
+
structura, лат. «строение»
Ваше приложение
Инфраструктура
Веб-сервер
БД
ОС
Облако
Этимология
Что такое «тестируемость»?
© 2015 Align Technology, Inc. All rights reserved. 6
ENIAC, 1945 год
© 2015 Align Technology, Inc. All rights reserved. 7
ENIAC
• Первый в мире универсальный компьютер (по Тьюрингу)
• Существует в единственном экземпляре
• Стоит $500.000 ($6 миллионов в современных деньгах)
• Программируется переключателями и проводами
Парное программирование
© 2015 Align Technology, Inc. All rights reserved. 8
ENIAC
ENIAC, ~1945 г. VMware , ~2015 г.
© 2015 Align Technology, Inc. All rights reserved. 9
!(Тестируемость)
Признаки не-тестируемой системы
• Дороговизна
• Уникальность
• Ограниченная доступность
• Недвижимость
• Сложность обучения
• Непредсказуемость
• Необходимость перетестировать
• Сложность верификации
• Длительное разворачивание
• 100% ручное
© 2015 Align Technology, Inc. All rights reserved. 10
Тестируемость
Признаки не-тестируемой системы
• Обыденность
• Бесплатность
• Общедоступность
• Мобильность
• Простота обучения
• Повторяемость
• Не нужно перетестировать
• Простота верификации
• Быстрое разворачивание
• Автоматизируемость
Кто такой «Chef»?
© 2015 Align Technology, Inc. All rights reserved. 12
Кто такой Chef?
• Инструмент управления конфигурациями
• Альтернатива Puppet, CFEngine, Ansible, MS SCCM
• Основан на Ruby (кастомный DSL)
• Сотни готовых “кулинарных книг” ( “кукбуков”) настройки серверов и приложений
• Дополнительные инструменты ( Knife, Chef-metal, Chef-container, Delivery, и т.п.)
• Сообщество разработчиков (!)
• Компания https://chef.io
© 2015 Align Technology, Inc. All rights reserved. 13
Видео с Chef
Что делать?
Тестировать!
© 2015 Align Technology, Inc. All rights reserved. 15
Тестировать!
• Статически– Rubocop
– Foodcritic
• Unit тестами– ChefSpec
– Guard (TDD)
• Интеграционные тестами– Test Kitchen
– Minitest
– Serverspec
• Управление релизами– Ревью исходного кода
– Версионирование
– CI на примере Atlassian Bamboo
– Деплойментопровод: Chef Delivery
<техническая_часть>
Статическое тестирование
© 2015 Align Technology, Inc. All rights reserved. 18
• Статический анализатор общего назначения на базе рекомендаций сообщества Ruby по стилизации исходного кода
• Плюсы– Простота настройки
– Адекватные правила для поддержания стиля и читаемости
• Минусы– Ничего не знает о Шефе
– Придирается по мелочам
– Отлавливает орфографические ошибки, но не баги
RuboCop http://batsov.com/rubocop/
© 2015 Align Technology, Inc. All rights reserved. 19
• Статический анализатор общего назначения на базе рекомендаций сообщества Ruby по стилизации исходного кода
• Подводные камни– Максимально полезен в больших,
распределенных проектах
– Нужно внедрять как можно раньше
– Сложно применить к сторонним кукбукам
RuboCop http://batsov.com/rubocop/
© 2015 Align Technology, Inc. All rights reserved. 20
RuboCop
© 2015 Align Technology, Inc. All rights reserved. 21
RuboCop
© 2015 Align Technology, Inc. All rights reserved. 22
Foodcritic http://www.foodcritic.io/
Специализированный статический анализатор для Chef кукбуков
• Минусы– Существуют ситуации,
когда адекватные правила невозможно выполнить
Умейте вносить исключения!
• Плюсы– Находит настоящие ошибки
в Chef коде
– Можно создавать собственные правила
• Подводные камни– Не все встроенные правила
одинаково полезны, часть – противоречивы
Выбирайте те, что подходят вам!
© 2015 Align Technology, Inc. All rights reserved. 23
Foodcritic: доступные правила
© 2015 Align Technology, Inc. All rights reserved. 24
Foodcritic: доступные правила
© 2015 Align Technology, Inc. All rights reserved. 25
Foodcritic: доступные правила
© 2015 Align Technology, Inc. All rights reserved. 26
Foodcritic: доступные правила
© 2015 Align Technology, Inc. All rights reserved. 27
Foodcritic: исключения
• Минусы– Существуют ситуации,
когда адекватные правила невозможно выполнить
Умейте вносить исключения!
© 2015 Align Technology, Inc. All rights reserved. 28
Foodcritic: исключения
Модульное (unit) тестирование
© 2015 Align Technology, Inc. All rights reserved. 30
ChefSpec https://github.com/sethvargo/chefspec
Фреймворк unit-тестирования для Chef кукбуков
• Основан на RSpec, специфичен для Chef:– Запускает «холостой» (bare) прогон Chef– Встроенные заглушки для ресурсов и атрибутов Chef– Встроенные проверки для основных ресурсов Chef– Обширные возможности расширения– Анализ покрытия индивидуальных объектов Chef
• Поддержка всех прелестей и инструментов RSpec
© 2015 Align Technology, Inc. All rights reserved. 31
ChefSpec https://github.com/sethvargo/chefspec
Специализированный статический анализатор для Chef кукбуков
• Минусы– Существуют ситуации, когда
адекватные правила невозможно выполнить
Умейте вносить исключения!
© 2015 Align Technology, Inc. All rights reserved. 32
ChefSpec https://github.com/sethvargo/chefspec
Фреймворк unit-тестирования для Chef кукбуков
• Минусы– Размытость между
определением и имплементацией тестов
• Плюсы– Проверяйте код по своим
собственным сценариям
– Полноценный BDD инструмент
– Отличный инструмент документации
– Доступ к полноценному интерпретатору Ruby
• Подводные камни– Проверяет намерение рецепта,
но не работоспособность
© 2015 Align Technology, Inc. All rights reserved. 33
Guard https://micgo.net/continuous-chefspec-validation-with-guard/
TDD утилита для RSpec отлично работает с ChefSpec
• Минусы– В отличие от autotest,
нужно устанавливать и настраивать отдельно
• Подводные камни– При частом запуске тестов
следите, чтобы не накапливались побочные эффекты
• Плюсы– Следит за изменениями
файлов и запускает связанные с ними тесты
– Поддерживает режим командной строки и генерации HTML отчета
Интеграционное тестирование
© 2015 Align Technology, Inc. All rights reserved. 35
Интеграционные тесты с ChefDK
ChefDK включает следующие инструменты:
• VirtualBox – бесплатная платформа локальной виртуализации ( Можно заменить на VMware Fusion/Workstation или Parallels )
+• Vagrant – API для управления VirtualBox, VMware,
Parallels, AWS EC2, и др.+
• Test-Kitchen – тестовая кухня
© 2015 Align Technology, Inc. All rights reserved. 36
Интеграционные тесты с ChefDK
• Test-Kitchen – тестовая кухня:– Управление жизненным циклом виртуальной машины (Vagrant, AWS
EC2, …)
– Настройка гипервизора и ОС (сеть, файлы, общие директории)
– Установка инструмента конфигурационного управления (Chef, Puppet, …)
– Параметризация и запуск конфигурационных скриптов
– Запуск интеграционных тестов (Minitest, Serverspec и др.)
https://github.com/test-kitchen/test-kitchen
© 2015 Align Technology, Inc. All rights reserved. 37
Интеграционные тесты с ChefDK
Интерфейс Test-Kitchen CLI
• kitchen create : Создание машины• kitchen converge : Запуск конфигурационных скриптов• kitchen setup : Инициализация тестовой инфраструктуры• kitchen verify : Запуск автоматических тестов• kitchen destroy: Уничтожение машин(ы)• kitchen test : destroy + create + converge + setup + verify +
destroy
• kitchen exec : запуск команды на машине/ах• kitchen login : подключение к интерактивной сессии
© 2015 Align Technology, Inc. All rights reserved. 38
Интеграционные тесты с ChefDK
Конфигурация Test-Kitchen
• driver : vagrant, ec2, docker, …• provisioner : script, chef_solo, chef_zero, puppet, ansible, …• platforms : centos, redhat, windows, …• suites : тестовые наборы
• Итоговые тестовые конфигурации: [ platfroms * suites - excludes * suites ]
• Команды kitchen принимают на вход:
имя_конфигурации | Regex (!) | all
© 2015 Align Technology, Inc. All rights reserved. 39
TK
© 2015 Align Technology, Inc. All rights reserved. 40
Интеграционные тесты с ChefDK
Test-Kitchen
• Подводные камни– Любые внешние зависимости
усложняют и замедляют запуск тестов в облаке и локально:
• Yum/Apt
• Внешние файлы
• Вспомогательные системы инфраструктуры
– В большинстве случаев, успешный прогон Chef – уже хороший интеграционный тест
• Плюсы:– Приучает писать хорошие,
самодостаточные кукбуки
– Применим для разработки и тестирования приложений
• Минусы– Нужен относительно мощный
компьютер и/или облако
– Сложности запуска VirtualBox на вирутальных машинах
– Необходимость дублировать конфигурацию для продуктива
© 2015 Align Technology, Inc. All rights reserved. 41
minitest-chef-handler https://github.com/chef/minitest-chef-handler
Фреймворк интеграционного тестирования Chef на основе minitest
• Подводные камни– Запускается на тестируемой
машине
– Minitest более ориентирован на программистов, чем RSpec
• Плюсы:– Лучший способ выполнять
проверки при каждом запуске Chef
– Доступ к объектам Chef: рецепты, атрибуты, контекст
• Минусы– Не работает без Chef
– Подход, отличный от RSpec
© 2015 Align Technology, Inc. All rights reserved. 42
minitest-chef-handler : обещание
© 2015 Align Technology, Inc. All rights reserved. 43
minitest-chef-handler : реальность
© 2015 Align Technology, Inc. All rights reserved. 44
ServerSpec http://serverspec.org/
Универсальный фреймворк интеграционного тестирования серверов
• Минусы– Появился позже Minitest
• Подводные камни– Запускается вне тестируемой
машины
– Практически ничего не знает про Chef
• Плюсы:– Разработан с отвязкой от
инструментов автоматизации
– Основан на Rspec
– Большое количество встроенных проверок
– Можно запускать на серверах, настроенных вручную
– Можно тестировать целые системы
© 2015 Align Technology, Inc. All rights reserved. 45
ServerSpec http://serverspec.org/
Управление релизами(release management)
© 2015 Align Technology, Inc. All rights reserved. 47
Версионирование http://semver.org
Мы используем слегка расширенный SemVer (Семантическое Версионирование)
Версия: Major.Minor.Patch• Major меняется при
– Изменениях интерфейса, не поддерживающих обратную совместимость
– Больших переработках
– Изменениях, которые не уйдут в продуктив несколько месяцев
• Minor меняется при– Добавлении функциональности, не ломающих обратную совместимость
– Обновлениях кукбука, специфичного для нового релиза системы
• Patch меняется при:– Любое другое изменение кукбука
© 2015 Align Technology, Inc. All rights reserved. 48
Версионирование
Привязка версий кукбуков к тестовым стендам
CI
• Фиксируем Major или Minor
DV
• Фиксируем Major или Minor
QA
• Фиксируем Minor
ST
• Фиксируем Patch
PR
• Фиксируем Patch
“align-tomcat”, “~> 1.1.0”
“align-tomcat”, “~> 1.0”
“align-tomcat”, “= 0.8.4”
“align-tomcat”, “= 0.8.2”
“align-tomcat”, “~> 0.8.0”
© 2015 Align Technology, Inc. All rights reserved. 49
Версионирование
Привязка версий кукбуков к тестовым стендам
CI
• Фиксируем Major или Minor
DV
• Фиксируем Major или Minor
QA
• Фиксируем Minor
ST
• Фиксируем Patch
PR
• Фиксируем Patch
Повышения версий происходят одновременно с версиями приложений
© 2015 Align Technology, Inc. All rights reserved. 50
Бранчевание в системе контроля версий
Мы используем Git для удобной работы с ветками
• Dev ветки для нестабильного кода• Release – ветки по необходимости (чаще всего Major
версии)• В остальном вся разработка в master
• Все ветки собираются в CI, но заливка на боевой Chef-сервер происходит только с release* и master веток– Непосредственно “релиз” кукбука происходит при
отметке соответствующего коммита тегом с номером версии
Рецензирование исходного кода
© 2015 Align Technology, Inc. All rights reserved. 52
Рецензирование исходного кода
Ключевой элемент долгосрочного повышения качества (!)
• Улучшает стилистическое единообразие• Избавляет от глупых ошибок (ппп)• Позволяет советовать более элегантные или оптимальные
решения• Держит команду в курсе актуальных изменений• Удобный способ коммуникации внутри команды
• Удобный способ коммуникации между командами
© 2015 Align Technology, Inc. All rights reserved. 53
Рецензирование исходного кода
Мы используем JIRA + Crucible от Atlassian
Талон можно закрыть, только если:• На каждый коммит существует код-ревью
и• Все код-ревью закрыты
– Одобрило два или более рецензента
– Не осталось неотвеченных запросов/предложений
или• Одобрено другим разработчиком с суперсилами (power
developer)
Сторонние команды: все изменения через pull-реквесты
© 2015 Align Technology, Inc. All rights reserved. 54
Непрерывная интеграция
© 2015 Align Technology, Inc. All rights reserved. 56
Непрерывная интеграция
© 2015 Align Technology, Inc. All rights reserved. 57
Непрерывная интеграция
Chef delivery
© 2015 Align Technology, Inc. All rights reserved. 59
Тестируемость
</техническая_часть>
Вывод 1
© 2015 Align Technology, Inc. All rights reserved. 62
Тестируемость
Признаки тестируемой системы
• Обыденность
• Бесплатность
• Общедоступность
• Мобильность
• Простота обучения
• Повторяемость
• Не нужно перетестировать
• Простота верификации
• Быстрое разворачивание
• Автоматизируемость
© 2015 Align Technology, Inc. All rights reserved. 63
1. Перевести инфраструктуру из проводов и ручных конфигураций в исходный код
2. Тестировать инфраструктурный код, как любой другой
3. …
4. Profit!
© 2015 Align Technology, Inc. All rights reserved. 64
Тестируемость
Признаки тестируемой системы
Обыденность Бесплатность Общедоступность Мобильность Простота обучения
Повторяемость Не нужно перетестировать Простота верификации Быстрое разворачивание Автоматизируемость
Вывод 2
© 2015 Align Technology, Inc. All rights reserved. 66
DEV
OPSSQA
Дополнительный побочный эффект
Превращается в …
© 2015 Align Technology, Inc. All rights reserved. 67
Service-oriented awesomeness! (SOA)
Дополнительный побочный эффект
Chef / IaaC / CI / Tests / Stuff
DEV SQA OPS
© 2015 Align Technology, Inc. All rights reserved. 68
и никакого кобыльего дерьма
Разнести их к
чертовой бабушке
Вывод 3
© 2015 Align Technology, Inc. All rights reserved. 70
Ваша инфраструктура все еще не тестируема?
бездействие действие
сложно
просто
© 2015 Align Technology, Inc. All rights reserved. 71
www.aligntech.com/careers