Upload
meyouslide
View
89
Download
0
Embed Size (px)
Citation preview
DevOps без булшита
About us
/aatarasoff
/aatarasoff
habrahabr.ru/aatarasoffdeveloperblog.info
/myfoxicus
/myfoxicus
High-performing IT organizations experience 60 times fewer failures and recover from failure 168 times faster than their lower-performing peers. They also deploy
30 times more frequently with 200 times shorter
lead times.
2015 2016 2017
DevOps - это buzzword...так же как BigData или Cloud
DevOps (?)
● Уступаем в скорости и качестве? ● Хочется повысить стабильность
работы приложений?● Сэкономить? Сократить?
Оптимизировать?● Legacy?● Технологии?
Зачем это Банку?DevOps
● Значительно сократитьtime-to-market
● Повысить качество инженерных решений в продуктах
● Сократить стоимость внедрения, эксплуатации и поддержки
Что это значит для бизнеса?DevOps
● Метрики и KPI?● Комитмент?● Фин модель внедрения DevOps?● CI … CD …?● …. ?
Как проверить Банку, что у нас случился DevOps?
Три составляющие DevOps
Мировоззрение - определяет образ жизни и мышления людей, подталкивает делать вещи правильно
Архитектура - определяет эффективность, степень боли и трудозатраты
Инструменты и практики - дают техническую возможность реализации наших хотелок
Изменение сознания (dev)
• Мой коТ работает на
моей машине
• Я написал инструкцию
админам
• Я что-то сделал, пусть
тестировщик тестирует
• Мой код работает у
клиента
• Я написал скрипт
развёртывания ПО
• Я должен написать
тесты
Изменение сознания (ops)
• Мне дали инструкцию
как выкладывать
продукт
• У вас ошибка в
инструкции
• У меня есть документ
как настраивать сервера
• Я написал скрипт
выкладки продукта
• У нас баг в скрипте
• У меня есть скрипт,
который настраивает
сервера
DEV QA DEPLOYANALISYS SUPPORT
Трансформация
QA SUPPORTDELIVERY
ANALISYS
DEV
QA
Слияние аналитики, разработки и внедрения
Доставка ПО - часть разработки
Единые инструменты и практики для команды
Нагрузочное тестирование как R&D
Тестирование начинается до разработки
Уменьшение рисков за счёт атомарности внедрений
Непрерывный мониторинг состояния системы
Эффективная обратная связь команде
Тестирование на «живых» клиентах
Перманентное ОПЭФокус на своём участке работы
Фокус на доставке ценности клиенту
Метрики
1 2
3
4 5
6
Наш вариантМетрика 01.2016 07.2016 План проекта
на12.2016 Факт 01.2017
Время доставки до клиента от завершения
разработки3-10д 2д 3 часа 2,5 часа
Длительность реализации 30д 10д 5д 3д
Время восстановления после аварии 30-40 мин 20 мин 5 мин 0*
Длительность исправления критических
дефектовN/A 1,5д 1д 0*
Количество багов на релиз 4-5 3 1 0,16
Процент неудавшихся внедрений N/A 0,9 % 0,7 % 0 %
// указаны календарные дни
История одной команды: от менеджеров к инженерам
Кучка евангелистов
Про идею!
Менеджеры, Архитекторы …
Про как и куда!
Разработчики, Тестировщики
Пробуем и улучшаем!
КомандаБерем и делаем!
Путь к инженерии
Жесткая специализация
Выполнение однотипной работы каждый день
Изучение смежных областей и
инструментов
Помощь другим участникам команды в эффективном выполнение их работы
Автоматизация своих действий
Использование инструментов и практик для уменьшения рутины
Инженерный подход
Непрерывное улучшение инструментов и практик
Инженерные практики
Непрерывная доставка ПО
Всё есть код: - документация - тестирование - доставка и развёртывание
Парная работа, кроссфункциональность
Все ходы записаны
Ссылки на артефакты: - документация - отчёт по
тестированию
Инженерные практики
Непрерывная доставка ПО
Всё есть код: - документация - тестирование - доставка и развёртывание
Парная работа, кроссфункциональность
Аналитик Разработчик Тестировщик
== Переводы между своими счетами (получение списка лимитов)Схема: [plantuml,"a2a-limits", "png"]---------- include::diagrams/a2a-limits.puml[]---------- Параметры ответа метода /search#POSTinclude::{snippets}/success/response-fields.adoc[]Пример ответа метода /search#POSTinclude::{snippets}/success/http-response.adoc[]
void "Верни ошибку 400, если в заголовке не указан customerID"() { when: def response = mockMvc.perform(post("/limits/search") .header("applicationId", "spockTest")) then: response.andExpect(status().isUnauthorized())) }
void "Верни ошибку 400, если в заголовке не указан customerID"() { when: def response = null then: response.andExpect(status().isUnauthorized())) }
api-pipeline-template.groovy
jobs.each { job -> pipelineJob("${basePath}/${job}") { //define SCM
definition { cps { script(readFileFromWorkspace('some_script.groovy')) sandbox() } } }}
Инженерные практики
Непрерывная доставка ПО
Всё есть код: - документация - тестирование - доставка и развёртывание
Парная работа, кроссфункциональность
АналитикРазработчик
Тестировщик
Единые инструменты • git • IDE (IDEA/ATOM) • Asciidoctor • Spock Framework
Совместные практики • приёмочное тестирование • TDD (разработка тестов) • BDD (разработка авто-тестов)
Совместные практики • приёмочное тестирование • TDD (проработка тест-кейсов) • BDD (сценарии авто UI-тестирования)
Совместные практики • TDD (проработка тест-кейсов) • документация • нефункциональное тестирование
ManagerDBA
BA
UX
Developer QA
Operations
Software Engineer
Вскрывшиеся нерешенные проблемы - next steps
Инженерные практики
API самообслуживания
SaaS внутри компании
Развитие и рост команды евагелистов
ВыводыDevOps состоит из трёх слагаемых:
• мировоззрения, • архитектуры, • инженерных практик
ВыводыDevOps - это: ● про ускорение доставки ценности клиенту ● не человек, не отдел и дело даже не в
разработчиках и сопровождении ● про людей, которые умеют программировать и
решать задачи на инженерном, а не процессном уровне
ВыводыСтавьте правильные метрики, но не забывайте, что метрики всего лишь метрики● нацелены на бизнес
○ время доставки ○ lead time
● нацелены на качество ○ количество дефектов ○ time budget
● нацелены на удовлетворенность ○ NPS внутри команд ○ NPS клиентов
● “красно-зеленые” таблицы ● нацелены на разработку или
сопровождение ● не учитывают ценность для
бизнеса
DevOps – Agile с другого конца
СПАСИБО!