Top Banner
Илья Фомин Готовим тестируемую инфраструктуру с Chef Align Technology, Inc.
72

Готовим тестируемую инфраструктуру с Chef

Jul 24, 2015

Download

Education

SQALab
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Готовим тестируемую инфраструктуру с Chef

Илья Фомин

Готовим тестируемую инфраструктуру с Chef

Align Technology, Inc.

Page 2: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 2

Обо мне

• Тестировщик

• Разработчик

• Сисадмин

• Менеджер

• В тестировании с 2006

• Align Technology, Inc. (NASDAQ:ALGN)

• Москва ---2013-–> Сан-Хосе (США)

Илья Фомин

• linkedin.com/in/fominfo

• @fom_info

[email protected]

Менеджер, Инструменты ДевОпс

Page 3: Готовим тестируемую инфраструктуру с Chef

Про инфраструктуру

Page 4: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 4

Инфраструктура

infra, лат. «ниже, под»

+

structura, лат. «строение»

Ваше приложение

Инфраструктура

Веб-сервер

БД

ОС

Облако

Этимология

Page 5: Готовим тестируемую инфраструктуру с Chef

Что такое «тестируемость»?

Page 6: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 6

ENIAC, 1945 год

Page 7: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 7

ENIAC

• Первый в мире универсальный компьютер (по Тьюрингу)

• Существует в единственном экземпляре

• Стоит $500.000 ($6 миллионов в современных деньгах)

• Программируется переключателями и проводами

Парное программирование

Page 8: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 8

ENIAC

ENIAC, ~1945 г. VMware , ~2015 г.

Page 9: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 9

!(Тестируемость)

Признаки не-тестируемой системы

• Дороговизна

• Уникальность

• Ограниченная доступность

• Недвижимость

• Сложность обучения

• Непредсказуемость

• Необходимость перетестировать

• Сложность верификации

• Длительное разворачивание

• 100% ручное

Page 10: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 10

Тестируемость

Признаки не-тестируемой системы

• Обыденность

• Бесплатность

• Общедоступность

• Мобильность

• Простота обучения

• Повторяемость

• Не нужно перетестировать

• Простота верификации

• Быстрое разворачивание

• Автоматизируемость

Page 11: Готовим тестируемую инфраструктуру с Chef

Кто такой «Chef»?

Page 12: Готовим тестируемую инфраструктуру с 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

Page 13: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 13

Видео с Chef

Page 14: Готовим тестируемую инфраструктуру с Chef

Что делать?

Тестировать!

Page 15: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 15

Тестировать!

• Статически– Rubocop

– Foodcritic

• Unit тестами– ChefSpec

– Guard (TDD)

• Интеграционные тестами– Test Kitchen

– Minitest

– Serverspec

• Управление релизами– Ревью исходного кода

– Версионирование

– CI на примере Atlassian Bamboo

– Деплойментопровод: Chef Delivery

Page 16: Готовим тестируемую инфраструктуру с Chef

<техническая_часть>

Page 17: Готовим тестируемую инфраструктуру с Chef

Статическое тестирование

Page 18: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 18

• Статический анализатор общего назначения на базе рекомендаций сообщества Ruby по стилизации исходного кода

• Плюсы– Простота настройки

– Адекватные правила для поддержания стиля и читаемости

• Минусы– Ничего не знает о Шефе

– Придирается по мелочам

– Отлавливает орфографические ошибки, но не баги

RuboCop http://batsov.com/rubocop/

Page 19: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 19

• Статический анализатор общего назначения на базе рекомендаций сообщества Ruby по стилизации исходного кода

• Подводные камни– Максимально полезен в больших,

распределенных проектах

– Нужно внедрять как можно раньше

– Сложно применить к сторонним кукбукам

RuboCop http://batsov.com/rubocop/

Page 20: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 20

RuboCop

Page 21: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 21

RuboCop

Page 22: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 22

Foodcritic http://www.foodcritic.io/

Специализированный статический анализатор для Chef кукбуков

• Минусы– Существуют ситуации,

когда адекватные правила невозможно выполнить

Умейте вносить исключения!

• Плюсы– Находит настоящие ошибки

в Chef коде

– Можно создавать собственные правила

• Подводные камни– Не все встроенные правила

одинаково полезны, часть – противоречивы

Выбирайте те, что подходят вам!

Page 23: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 23

Foodcritic: доступные правила

Page 24: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 24

Foodcritic: доступные правила

Page 25: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 25

Foodcritic: доступные правила

Page 26: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 26

Foodcritic: доступные правила

Page 27: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 27

Foodcritic: исключения

• Минусы– Существуют ситуации,

когда адекватные правила невозможно выполнить

Умейте вносить исключения!

Page 28: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 28

Foodcritic: исключения

Page 29: Готовим тестируемую инфраструктуру с Chef

Модульное (unit) тестирование

Page 30: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 30

ChefSpec https://github.com/sethvargo/chefspec

Фреймворк unit-тестирования для Chef кукбуков

• Основан на RSpec, специфичен для Chef:– Запускает «холостой» (bare) прогон Chef– Встроенные заглушки для ресурсов и атрибутов Chef– Встроенные проверки для основных ресурсов Chef– Обширные возможности расширения– Анализ покрытия индивидуальных объектов Chef

• Поддержка всех прелестей и инструментов RSpec

Page 31: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 31

ChefSpec https://github.com/sethvargo/chefspec

Специализированный статический анализатор для Chef кукбуков

• Минусы– Существуют ситуации, когда

адекватные правила невозможно выполнить

Умейте вносить исключения!

Page 32: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 32

ChefSpec https://github.com/sethvargo/chefspec

Фреймворк unit-тестирования для Chef кукбуков

• Минусы– Размытость между

определением и имплементацией тестов

• Плюсы– Проверяйте код по своим

собственным сценариям

– Полноценный BDD инструмент

– Отличный инструмент документации

– Доступ к полноценному интерпретатору Ruby

• Подводные камни– Проверяет намерение рецепта,

но не работоспособность

Page 33: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 33

Guard https://micgo.net/continuous-chefspec-validation-with-guard/

TDD утилита для RSpec отлично работает с ChefSpec

• Минусы– В отличие от autotest,

нужно устанавливать и настраивать отдельно

• Подводные камни– При частом запуске тестов

следите, чтобы не накапливались побочные эффекты

• Плюсы– Следит за изменениями

файлов и запускает связанные с ними тесты

– Поддерживает режим командной строки и генерации HTML отчета

Page 34: Готовим тестируемую инфраструктуру с Chef

Интеграционное тестирование

Page 35: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 35

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

ChefDK включает следующие инструменты:

• VirtualBox – бесплатная платформа локальной виртуализации ( Можно заменить на VMware Fusion/Workstation или Parallels )

+• Vagrant – API для управления VirtualBox, VMware,

Parallels, AWS EC2, и др.+

• Test-Kitchen – тестовая кухня

Page 36: Готовим тестируемую инфраструктуру с Chef

© 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

Page 37: Готовим тестируемую инфраструктуру с Chef

© 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 : подключение к интерактивной сессии

Page 38: Готовим тестируемую инфраструктуру с Chef

© 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

Page 39: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 39

TK

Page 40: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 40

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

Test-Kitchen

• Подводные камни– Любые внешние зависимости

усложняют и замедляют запуск тестов в облаке и локально:

• Yum/Apt

• Внешние файлы

• Вспомогательные системы инфраструктуры

– В большинстве случаев, успешный прогон Chef – уже хороший интеграционный тест

• Плюсы:– Приучает писать хорошие,

самодостаточные кукбуки

– Применим для разработки и тестирования приложений

• Минусы– Нужен относительно мощный

компьютер и/или облако

– Сложности запуска VirtualBox на вирутальных машинах

– Необходимость дублировать конфигурацию для продуктива

Page 41: Готовим тестируемую инфраструктуру с Chef

© 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

Page 42: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 42

minitest-chef-handler : обещание

Page 43: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 43

minitest-chef-handler : реальность

Page 44: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 44

ServerSpec http://serverspec.org/

Универсальный фреймворк интеграционного тестирования серверов

• Минусы– Появился позже Minitest

• Подводные камни– Запускается вне тестируемой

машины

– Практически ничего не знает про Chef

• Плюсы:– Разработан с отвязкой от

инструментов автоматизации

– Основан на Rspec

– Большое количество встроенных проверок

– Можно запускать на серверах, настроенных вручную

– Можно тестировать целые системы

Page 45: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 45

ServerSpec http://serverspec.org/

Page 46: Готовим тестируемую инфраструктуру с Chef

Управление релизами(release management)

Page 47: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 47

Версионирование http://semver.org

Мы используем слегка расширенный SemVer (Семантическое Версионирование)

Версия: Major.Minor.Patch• Major меняется при

– Изменениях интерфейса, не поддерживающих обратную совместимость

– Больших переработках

– Изменениях, которые не уйдут в продуктив несколько месяцев

• Minor меняется при– Добавлении функциональности, не ломающих обратную совместимость

– Обновлениях кукбука, специфичного для нового релиза системы

• Patch меняется при:– Любое другое изменение кукбука

Page 48: Готовим тестируемую инфраструктуру с Chef

© 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”

Page 49: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 49

Версионирование

Привязка версий кукбуков к тестовым стендам

CI

• Фиксируем Major или Minor

DV

• Фиксируем Major или Minor

QA

• Фиксируем Minor

ST

• Фиксируем Patch

PR

• Фиксируем Patch

Повышения версий происходят одновременно с версиями приложений

Page 50: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 50

Бранчевание в системе контроля версий

Мы используем Git для удобной работы с ветками

• Dev ветки для нестабильного кода• Release – ветки по необходимости (чаще всего Major

версии)• В остальном вся разработка в master

• Все ветки собираются в CI, но заливка на боевой Chef-сервер происходит только с release* и master веток– Непосредственно “релиз” кукбука происходит при

отметке соответствующего коммита тегом с номером версии

Page 51: Готовим тестируемую инфраструктуру с Chef

Рецензирование исходного кода

Page 52: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 52

Рецензирование исходного кода

Ключевой элемент долгосрочного повышения качества (!)

• Улучшает стилистическое единообразие• Избавляет от глупых ошибок (ппп)• Позволяет советовать более элегантные или оптимальные

решения• Держит команду в курсе актуальных изменений• Удобный способ коммуникации внутри команды

• Удобный способ коммуникации между командами

Page 53: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 53

Рецензирование исходного кода

Мы используем JIRA + Crucible от Atlassian

Талон можно закрыть, только если:• На каждый коммит существует код-ревью

и• Все код-ревью закрыты

– Одобрило два или более рецензента

– Не осталось неотвеченных запросов/предложений

или• Одобрено другим разработчиком с суперсилами (power

developer)

Сторонние команды: все изменения через pull-реквесты

Page 54: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 54

Page 55: Готовим тестируемую инфраструктуру с Chef

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

Page 56: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 56

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

Page 57: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 57

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

Page 58: Готовим тестируемую инфраструктуру с Chef

Chef delivery

Page 59: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 59

Тестируемость

Page 60: Готовим тестируемую инфраструктуру с Chef

</техническая_часть>

Page 61: Готовим тестируемую инфраструктуру с Chef

Вывод 1

Page 62: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 62

Тестируемость

Признаки тестируемой системы

• Обыденность

• Бесплатность

• Общедоступность

• Мобильность

• Простота обучения

• Повторяемость

• Не нужно перетестировать

• Простота верификации

• Быстрое разворачивание

• Автоматизируемость

Page 63: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 63

1. Перевести инфраструктуру из проводов и ручных конфигураций в исходный код

2. Тестировать инфраструктурный код, как любой другой

3. …

4. Profit!

Page 64: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 64

Тестируемость

Признаки тестируемой системы

Обыденность Бесплатность Общедоступность Мобильность Простота обучения

Повторяемость Не нужно перетестировать Простота верификации Быстрое разворачивание Автоматизируемость

Page 65: Готовим тестируемую инфраструктуру с Chef

Вывод 2

Page 66: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 66

DEV

OPSSQA

Дополнительный побочный эффект

Превращается в …

Page 67: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 67

Service-oriented awesomeness! (SOA)

Дополнительный побочный эффект

Chef / IaaC / CI / Tests / Stuff

DEV SQA OPS

Page 68: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 68

и никакого кобыльего дерьма

Разнести их к

чертовой бабушке

Page 69: Готовим тестируемую инфраструктуру с Chef

Вывод 3

Page 70: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 70

Ваша инфраструктура все еще не тестируема?

бездействие действие

сложно

просто

Page 71: Готовим тестируемую инфраструктуру с Chef

© 2015 Align Technology, Inc. All rights reserved. 71

www.aligntech.com/careers

Page 72: Готовим тестируемую инфраструктуру с Chef

Спасибо!

• Илья Фомин

• linkedin.com/in/fominfo

[email protected]

• @fom_info