8.0 Введение к части 8: Автоматизация
Программное обеспечение создаёт ценность только тогда, когда достигает пользователей. Путь от закоммиченного изменения до работающего производственного кода то место, где большие организации чаще всего теряют скорость, безопасность и рассудок. В масштабе сотен инженеров, десятков команд и тысяч ресурсов инфраструктуры неформальные привычки, работающие для малой группы, ломаются полностью. Ручные сборки, настроенные вручную серверы и разовые скрипты развёртывания замедляют вас, а хуже того, становятся невоспроизводимыми, недокументированными и непроверяемыми. Эта часть о замене этой хрупкости автоматизацией: превращении беспорядочной, подверженной ошибкам работы по сборке, подготовке, развёртыванию и эксплуатации программного обеспечения в кодифицированные, повторяемые, рецензируемые системы.
Ставки для больших команд и для корпоративных и государственных организаций конкретны. Когда многие команды делят пересекающиеся системы, цена ручной интеграции и ручных операций растёт нелинейно, а одно нерецензированное изменение может молча сломать работу другой команды или весь релиз. Регулируемые организации несут дополнительное бремя. Аудиторам, специалистам по безопасности и регуляторам нужны свидетельства того, что изменения были рецензированы, протестированы и утверждены и что артефакт, работающий в производстве, именно тот, что был собран и проверен. Автоматизация превращает эти обязательства соответствия из бумажного бремени в автоматический побочный продукт обычного инженерного рабочего процесса. Вы переходите от ловли нарушений постфактум к их предотвращению до того, как что-либо подготовлено или отгружено.
Часть 8 следует по механизму поставки от конца до конца: от конвейера, интегрирующего и выпускающего код, через кодифицированную инфраструктуру, на которой он работает, к платформе контейнеров, которая его размещает, внутренней платформе, делающей всё это пригодным для обычных команд, и автоматизации, не дающей качеству и контролю рухнуть под масштабом. Сквозная линия проста. Всё, что вы делаете повторно и предсказуемо, должно быть кодифицировано, чтобы работать последовательно, быстро и без человеческой рутины.
Главы этой части
8.1 CI/CD и поставка: Стройте автоматизированный конвейер, интегрирующий каждое изменение в общую основную линию, тестирующий его и держащий в готовом к развёртыванию состоянии, так что выпуск становится безопасным бизнес-решением, а не инженерной суетой, причём проверяемым.
8.2 Инфраструктура как код и конфигурация: Определяйте и подготавливайте инфраструктуру через версионируемые, рецензируемые машиночитаемые определения, а не ручные щелчки, так что среды согласованны, воспроизводимы и одноразовы, с правилами управления, встроенными и проверяемыми до того, как что-либо существует.
8.3 Контейнеры, оркестрация и облачные технологии: Упаковывайте приложения и их зависимости в переносимые изолированные единицы и запускайте их в масштабе на платформах оркестрации вроде Kubernetes, давая многим командам общий субстрат для развёртывания, масштабирования и устойчивости, управляя происхождением, изоляцией и ценой.
8.4 Платформенная инженерия и опыт разработчика: Стройте и эксплуатируйте внутреннюю платформу разработчика, предлагающую курируемые «золотые пути» самообслуживания (категоричные поддерживаемые маршруты с разумными умолчаниями), поглощая общую сложность, так что команды сосредоточены на своей области, наследуя по умолчанию стандарты организации по безопасности, надёжности и соответствию требованиям.
8.5 Автоматизация тестов и процессов: Заменяйте повторяющееся ручное тестирование и операционную работу надёжными машинно исполняемыми рабочими процессами, от непрерывных наборов тестов до ранбуков, исправления и сбора свидетельств соответствия, так что качество и контроль масштабируются, а квалифицированные инженеры освобождаются для проблем, требующих суждения.
8.6 Управление релизами и прогрессивная поставка: Разделение развёртывания и выпуска, так что отгрузка кода отделена от открытия функции, и постепенное внедрение изменений с флагами функций, канареечными и сине-зелёными развёртываниями, автоматическими проверками здоровья и откатом и выпусками, ограниченными бюджетом ошибок, сокращающими радиус поражения любого изменения.
8.7 Системы сборки и управление артефактами: Делание сборки воспроизводимой, быстрой и кэшируемой и воспринимание артефактов как неизменяемых, версионированных и подписанных, собираемых один раз и продвигаемых по средам с происхождением и целостностью цепочки поставок.
Как эти главы связаны между собой
Эти главы описывают слои единой системы поставки, каждый опирается на нижележащие. Непрерывная интеграция и непрерывная поставка (CI/CD, глава 8.1) это соединительная ткань, несущая изменение от коммита до производства. Но конвейеру нужно, на что развёртывать, и инфраструктура как код (8.2) обеспечивает эту цель как версионируемые воспроизводимые определения, а не вручную сделанные «снежинки». Контейнеры и оркестрация (8.3) это среда выполнения, которую всё чаще предполагают и конвейер, и кодифицированная инфраструктура, давая каждой команде согласованный контракт упаковки и развёртывания. Платформенная инженерия (8.4) затем оборачивает всё это в связный внутренний продукт, так что обычные команды используют конвейеры, инфраструктуру и оркестрацию через проторённые дороги, а не собирают их с нуля. Автоматизация тестов и процессов (8.5) проходит через каждый слой, встраивая барьеры качества в конвейер и кодифицируя операционную работу и работу по соответствию, держащую всё хозяйство здоровым. Слабость на любом слое подрывает слои выше. Хрупкий конвейер, среда-«снежинка» или неуправляемая платформа каждая вновь вводят именно тот ручной риск, который автоматизация призвана устранить.
Часть также простирается наружу. Дисциплина поставки здесь инженерная реализация мышления о потоке и конвейерах поставки в части 11, особенно в главе 11.2, и она зависит от тех же динамик очередей, что управляют любой системой с высокой пропускной способностью. То, что строят эти главы, предназначено для эксплуатации, поэтому они ведут прямо к операциям и надёжности в части 9 (инженерия надёжности сайтов в главе 9.1 и наблюдаемость в главе 9.2), рассматривающим работающую систему, которую развёртывает автоматизация. Темы управления и соответствия как кода по всей части 8 удовлетворяют ограничениям безопасности и регулирования, заданным в других местах руководства, а описанные здесь платформы также то, где всё чаще работают нагрузки ИИ и данных, связывая эту часть с заботами MLOps (эксплуатации машинного обучения) и инфраструктуры из части 6. Прочитанные вместе, эти главы показывают, как большая организация выпускает программное обеспечение быстро, не отказываясь от безопасности, согласованности или контроля.