Краткое содержание
Оглавление
Вступительное слово
Предисловие
Благодарности
О книге
Для кого эта книга
Структура и план книги
Форум liveBook
Об авторе
От издательства
ЧАСТЬ 1. ЧТО ТАКОЕ НЕПРЕРЫВНАЯ ДОСТАВКА
Глава 1. Добро пожаловать в «Грокаем Continuous Delivery»
Нужна ли вам непрерывная доставка
Зачем нужна непрерывная доставка
Непрерывная доставка
Интеграция
Непрерывная интеграция
Что мы доставляем
Доставка
Непрерывная доставка / непрерывное развертывание
Элементы непрерывной доставки
Заключение
Итоги
Далее...
Глава 2. Базовый пайплайн
Веб-сайт Cat Picture
Исходный код сайта Cat Picture
Пайплайны сайта Cat Picture
Что же такое пайплайн и что такое задача
Основные задачи в пайплайне CD
Шлюзы и преобразования
CD: шлюзы и преобразования
Пайплайн сервисов сайта Cat Picture
Запуск пайплайна
Запуск один раз в сутки
Пробуем использовать непрерывную интеграцию
Использование уведомлений
Масштабирование в ручном режиме
Автоматизация посредством веб-хуков
Масштабирование при наличии веб-хуков
Не отправляйте изменения при сбое пайплайна
Непрерывная доставка для сайта Cat Picture
Как насчет терминологии?
Заключение
Итоги
Далее...
ЧАСТЬ 2. ПОДДЕРЖАНИЕ ПО В СОСТОЯНИИ ГОТОВНОСТИ К ДОСТАВКЕ
Глава 3. Контроль версий — единственно верный путь
Стартап Саши и Сары
Все виды данных
Исходный код и программы
Репозитории и версии
Непрерывная доставка и контроль версий
Git и GitHub
Первый коммит — с багом!
Нарушение работы главной ветки
Отправка (push) и вытягивание (pull) изменений
Это действительно непрерывная доставка?
Поддерживайте возможность выпуска релизов
Срабатывание при изменениях в системе контроля версий
Запуск пайплайна сервиса пользователей
Сборка сервиса пользователей
Сервис пользователей в облаке
Подключение к базе данных RandomCloud
Управление сервисом пользователей
Сбой в работе сервиса пользователей
Автоматизация всех переиграла
В чем «источник истины»?
Принцип «конфигурация как код» для сервиса пользователей
Настройка Deployaker
Принцип «конфигурация как код»
Раскатка изменений в ПО и конфигурации
Заключение
Итоги
Далее...
Глава 4. Эффективное использование линтинга
Бекки и проект Super Game Console
Линтинг спешит на помощь!
Вся правда о линтинге
Сказ о Pylint и множестве ошибок
Унаследованный код: системный подход
Шаг 1. Настройка линтера в соответствии со стандартами написания кода
Шаг 2. Определение базового уровня
Шаг 3. Принудительная проверка при поступлении данных
Добавление принудительной проверки в пайплайн
Шаг 4. «Разделяй и властвуй»
Изолирование: не все нужно исправлять
Принудительное изолирование
Не все проблемы одинаковы
Какие проблемы выявляет линтинг
Сначала баги потом стиль
Новые препятствия
Заключение
Итоги
Далее...
Глава 5. Работа с нестабильными тестами
Непрерывная доставка и тесты
Сбой в работе сервиса Ice Cream for All
Сигнал и шум
«Нестабильный успех»
Как провалы тестов становятся шумом
От шума к сигналу
Цель — зеленый режим
Опять сбой!
Успешно прошедшие тесты могут оказаться нестабильными
Исправление ошибок в тестах
Виды провала тестов: flaky-тесты
Реагирование на сбои
Код или тест: что менять исправляя тесты?
Опасности повторного тестирования
Пересмотр повторного тестирования
Зачем же перезапускать тесты?
Добившись «зеленого» статуса поддерживайте его
Заключение
Итоги
Далее...
Глава 6. Ускорение медленных наборов тестов
Веб-сайт Dog Picture
Когда простое слишком просто
Новый разработчик пытается отправить код
Тесты и непрерывная доставка
Диагноз: слишком медленно
Пирамида тестов
Сначала быстрые тесты
Два пайплайна
Соблюдение баланса
Меняем пирамиду тестов
Безопасная корректировка тестов
Покрытие тестами
Как обеспечить тестовое покрытие
Тестовое покрытие в пайплайне
Перемещение тестов по пирамиде с учетом покрытия
Как двигаться вниз по пирамиде?
Унаследованные тесты и FUD
Параллельный запуск тестов
Когда можно выполнять тесты параллельно?
Обновление пайплайнов
Все еще слишком медленно!
Шардинг тестов он же параллельный режим ++
Как использовать шардинг
Более сложный шардинг
Шардированный пайплайн
Шардинг браузерных тестов
Шардинг в пайплайне
Пайплайны сайта Dog Picture
Заключение
Итоги
Далее...
Глава 7. Нужные сигналы в нужное время
Веб-сайт CoinExCompare
Жизненный цикл изменения
Проводите непрерывную интеграцию только перед слиянием
Последовательность появления багов при внесении изменений
CI проводимая только перед слиянием пропускает ошибки
История двух графиков: установка значения по умолчанию «семь дней»
История двух графиков: установка значения по умолчанию «30 дней»
Конфликтующие изменения не всегда удается отловить
А как же юнит-тесты?
Запуск на основе PR не защищает систему от багов
Непрерывная интеграция до И после слияния
Вариант 1: периодический запуск CI
Вариант 1: настройка периодической CI
Вариант 2: постоянное обновление веток
Вариант 2: какой ценой?
Вариант 3: автоматическое слияние силами CI
Вариант 3: запуск CI с последней версией главной ветки
Вариант 3: события слияния
Вариант 3: очереди слияний
Вариант 3: очередь слияния для CoinExCompare
Где еще могут возникнуть баги?
Флейки и CI инициируемая пул-реквестом
Отлавливание флейков периодическими тестами
Баги и сборка
Непрерывная интеграция либо сборка и развертывание
Сборка и развертывание с использованием одинаковой логики
Усовершенствованный пайплайн CI с процессом сборки
Еще раз о временной шкале изменений
Заключение
Итоги
Далее...
ЧАСТЬ 3. СДЕЛАЕМ ПРОЦЕСС ДОСТАВКИ ПРОЩЕ
Глава 8. Простая доставка начинается с контроля версий
Тем временем на сайте Watch Me Watch
Метрики DORA
Метрики скорости для Watch Me Watch
Время доставки изменений
Сайт Watch Me Watch и наилучшие показатели
Повышаем скорость работы в Watch Me Watch
Интеграция с AllCatsAllTheTime
Инкрементная доставка функций
Коммит с пропущенными тестами
Проверка кода и неполный код
Двигаемся дальше
Коммит незавершенного кода
Ревью незавершенного кода
Вернемся к сквозным тестам
Оценим преимущества
Сокращение времени доставки изменений
Продолжим работу над AllCatsAllTheTime
Окна развертывания и заморозка кода
Повышение скорости
Заключение
Итоги
Далее...
Глава 9. Безопасная и надежная сборка
Веб-сайт Top Dog Maps
Когда процесс сборки — это документ
Атрибуты безопасных и надежных сборок
Постоянная готовность к релизу
Автоматические сборки
Сборка как код
Использование сервиса непрерывной доставки
Временные среды для сборки
План Мигеля
От документации к скрипту в системе контроля версий
Автоматические контейнерные сборки
Безопасная и надежная сборка
Изменения интерфейса и баги
Когда сборки вызывают баги
Сборки и коммуникация
Семантическое версионирование
Важность версионирования
Очередной сбой!
Ошибки в зависимостях во время сборки
Привязка зависимостей
Привязка к версии не панацея
Привязка к хешам
Заключение
Итоги
Далее...
Глава 10. Надежное развертывание
Множество проблем с развертыванием
Метрики DORA для стабильности
Метрики DORA для сайта Plenty of Woofs
А если делать развертывания реже?
А если делать развертывания чаще?
Ежедневные развертывания и сбои
Как увеличить частоту развертываний
Устраняем недостатки разработки
Скользящие обновления
Исправление багов при скользящем обновлении
Откаты
Откат = немедленное улучшение
Политика откатов в действии
Сине-зеленые развертывания
Быстрое восстановление при сине-зеленом развертывании
Быстрее и стабильнее с «канарейками»
Требования к канареечным развертываниям
Канареечное развертывание параллельно с базовым
Время восстановления работоспособности при канареечном развертывании
Увеличение частоты развертывания
Метрики DORA при ежедневных канареечных развертываниях
Непрерывное развертывание
Когда использовать непрерывное развертывание
Обязательные этапы контроля качества
Контроль качества и непрерывное развертывание
Суперэффективность согласно метрикам DORA
Заключение
Итоги
Далее...
ЧАСТЬ 4. РЕАЛИЗАЦИЯ НЕПРЕРЫВНОЙ ДОСТАВКИ
Глава 11. Стартовые наборы: с нуля до CD
Стартовые наборы: обзор
Универсальные задачи пайплайна CD
Прототип пайплайна выпуска
Прототип пайплайна CI
Пайплайны и их инициализация
Проект с нуля: переходим к CD
Проект Gulpy
Проект greenfield: с нуля до CD
Первый шаг: выполняется ли сборка?
Выбор системы CD
Настройка начальной автоматизации
Состояние кода: линтинг
Состояние кода: юнит-тесты
Состояние кода: покрытие
Что дальше: публикация
Развертывание
Расширяем тестирование
Задачи для интеграционных и сквозных тестов
Завершаем пайплайн CI
Окончательные пайплайны проекта Gulpy
Унаследованный проект: переход к CD
Проект Rebellious Hamster
Первый шаг: установление приоритетов для инкрементных целей
В первую очередь «болевые точки»
«Болевые точки» в проекте Rebellious Hamster
Всегда узнавать о сбоях
Изолируем код и добавляем тесты
Добавление большего количества тестов в унаследованный пайплайн
Увеличение степени автоматизации развертывания
Создание пайплайна выпуска
Пайплайн выпуска Rebellious Hamster
Окончательный вид пайплайнов Rebellious Hamster
Заключение
Итоги
Далее...
Глава 12. Скрипты — это тоже код
Онлайн-банк Purrfect Bank
Проблемы непрерывной доставки
Схема непрерывной доставки в онлайн-банке Purrfect Bank
Bash-библиотеки подразделения платежей
Пайплайн сервиса транзакций
Избавляемся от одного большого скрипта
Принципы хорошо спроектированной задачи
Разделение гигантской задачи на части
Обновленный пайплайн сервиса транзакций
Отладка bash-библиотек
Исследуем баг в bash-библиотеке
Почему появился это баг?
Для чего нужен bash
Когда bash не подходит
Сравнение языков shell-скриптов и языков общего назначения
От языка shell-скриптов к языку общего назначения
План перехода
От библиотеки bash к задаче с bash-скриптом
Многоразовый bash-скрипт внутри задачи
Переход от bash к Python
Задачи как код
Скрипты CD — это тоже код
Заключение
Итоги
Далее...
Глава 13. Реализация пайплайнов
Проект PetMatch
Пайплайны CD сервиса подбора соответствий
Проблемы пайплайнов CD
Пайплайн сквозного тестирования
Пайплайн сквозного тестирования и ошибки
Finally-логика
Концепция Finally в виде графа
Принцип Finally в пайплайне сервиса подбора соответствий
Пайплайн сквозного тестирования и скорость
Параллельное выполнение задач
Пайплайн сквозного тестирования и скорость выполнения тестов
Параллельное выполнение и шардинг тестов
Пайплайн сквозного тестирования с шардингом
Пайплайн сквозного тестирования и сигналы
Единый пайплайн CI
Пайплайн выпуска релизов и сигналы
Различия в пайплайнах CI и выпуска релизов
Комбинация пайплайнов
Пайплайн выпуска релизов
Хардкодинг в пайплайне выпуска релизов
Повторное использование пайплайна с помощью параметризации
Применение повторно используемых пайплайнов
Обновленные пайплайны
Решение проблем непрерывной доставки в проекте PetMatch
Важные особенности непрерывной доставки
Заключение
Итоги
Далее...
ПРИЛОЖЕНИЯ
Приложение А. Системы непрерывной доставки
Приложение В. Системы контроля версий
Код должен быть готов к релизу всегда!
Пайплайн Continuous Delivery автоматизирует процессы контроля версий, тестирования и развертывания при минимальном вмешательстве разработчика. Освойте инструменты и методы непрерывной доставки, и вы сможете быстро и последовательно добавлять функции и выпускать обновления.
«Грокаем Continuous Delivery» — это руководство по настройке и работе с пайплайном непрерывной доставки. В каждой главе рассматривается отдельный сценарий, с которым вы столкнетесь при создании системы CD, и приводятся реальные примеры, например автоматическое масштабирование и тестирование унаследованных приложений. Кристи Уилсон сопровождает каждый шаг иллюстрациями, кристально четкими объяснениями и практическими упражнениями для закрепления полученных знаний.