Когда я прочитал книгу Джез Смири Непрерывная доставка Несколько лет назад я чувствовал, что я смотрел. Я думал, что Джез контролировал нас и наблюдая за борьбой с развертыванием. В 2015 году Maxwell Health высвобождается раз в неделю. Это был скоординированный роман и распространенный с тем, что мы обнаружили, были антиблокировки. Мы развернули развертывающие часы, мы скоординировали развертывание между командами, и у каждой среды имели собственную сборку. Если все пошло не так, мы бы попытались исправить. Это вызвало ненужное стресс, ввел риск нашего опыта клиентов и нашего программного обеспечения, и мы должны были внести изменения.
Сегодня Maxwell развертывает код до производства десятков раз в день без инцидента. Это потребовало координации и преданностью, чтобы изменить наш процесс, и это было обеспечено усилия.
Мы отправляем небольшие артефакты
В нашем старом трубопроводе развертывания мы связали нашу стратегию разветвленной к нашим развертыванию. Наша стратегия была вариацией на Гит поток . При создании новой функции инженер будет отделение от мастера и назвать вашу ветку Функция-ABC Отказ Затем у нас была ветка для каждой из нашей среды — QA, постановка и производство. Инженер объединил свою ветку в филиал QA для тестирования. После того, как функция прошла тестирование, _Feature-ABC _Branch может быть объединен во второй раз, на этот раз для мастера, а мастер будет объединен в промежуточные и производственные филиалы. Каждое слияние было его собственным сборкой, и этот процесс поощрял несоответствия между средами. Что было на QA, не гарантированно быть именно то, что было развернуто для постановки или производства.
После того, как испытывает путаницу, проблемы координации, а также слишком много неправильных признаков, мы приняли версию Github Flow Отказ Инженер создает ветку от мастера, как у них раньше. После утверждения инженер-тестирование того, что код объединяет ветку для освоения. Затем конвейери сборки создают артефакт в нашем случае докера и развертывает его в нашей среде QA. Каждый коммит после мастера должен быть развернут. Это держит трубопровод ясно и может быть развернут до производства без инцидента. Каждый развертываемый коммит также означает, что авторы должны иметь сильные автоматизированные тесты для обеспечения уверенности в их изменении. Если это не произойдет тестирование на среду QA или блокирует трубопровод по какой-либо причине, мы возвращаем его.
Если исследовательское тестирование успешно в QA, команда может затем отправить этот артефакт в другие среды, создавая метка GIT. Наш сборщик Build знает, основанный на названии тега, чтобы отправить артефакт из этого Git Hash в целевую среду. Мы даже упростим его, построив небольшую командную команду.
Наша оснастка также позволяет быстро откатиться. Чтобы откат, вы бы назвали одну и ту же команду для SHA, к которой вы хотите вернуться. Обычно предыдущее развертывание.
Наша старая ветвяя стратегия поощряла долгоживущие ветви. Было бы болезненные конфликты слияния, разные порядок слияния на производстве Qa VS, и каждая среда будет вести себя немного по-другому. Для размещения потока/артефакта GitHub каждая из изменений должна была быть небольшими, освобождающимися и проверена хорошо. С меньшими релизами, как улучшения, так и исправления ошибок проще разумятся и проверяют. Наш процесс обзора кода менее болезненна, и у нас меньше инцидентов в производстве.
SLOS для сборки, развертывания и отката
Мы решили, что важно сосредоточиться на откатах как часть нашей стратегии. В прошлом мы бы исправили вперед, а не откат. Исправление вперед, в то время как хорошо преднамеренные, побудили нас сделать все хуже. Мы бы попытались внести изменения во время принуждения. В худших случаях мы вызвали ошибки в производстве, пытаясь исправить другие проблемы.
Вместо этого мы хотим, чтобы откаты были первым инструментом в наших инструментах наших инженеров. Наше руководство для наших команд, чтобы сделать откаты возможными менее минуты. В результате, быстрота отката делает его по умолчанию вместо последнего курорта. Поскольку наша стратегия отката идентична развертыванию (используя команду make для отправки определенного образа докера на конкретную среду), наше время развертывания также улучшилось.
Мы также поощряем сборки менее 10 минут. Наша ветвяя стратегия поощряет возврат и слияние на мастер чаще. Каждый из этих событий триггер сборки, поэтому длительные сборки являются прерыванием для команд. Мы должны продолжать строить время максимально короткой. Мы тратим деньги как на время нашей команды, так и наше время сервера сборки, пока мы строим. Так что времени потрачено на здание должно быть минимально.
Одинаковые среды
Чтобы разрешить уверенность в наших развертываниях, мы должны были быть уверены в наших условиях. Если одна среда совсем другая, мы открываемся для ошибок. Правильный способ сделать это — инвестировать в инструменты, которые делают вашу инфраструктуру повторяющуюся и ревижную. Для нас, что означало инвестировать в нашу инфраструктурную стратегию. В Maxwell мы используем докер, террафом, Kubernetes и другие инструменты, чтобы убедиться, что наша среда настолько похожи.
Разделение освобождения от развертывания
Наконец, Максвелл побуждает нашим командам отделить концепции развертывания и освобождения. Мы даже решили, что наш словарь по теме был хорошо определен. Развертывание — это акт перемещения кода к окружающей среде, в то время как релизы — это процесс создания функциональности, доступных для заинтересованного лица. Хотя мы развертываем несколько раз в день, наши релизы могут быть менее частыми и контролируются нашими владельцами продукта. Релизы обычно состоят из более чем одного небольшого изменения. Релизы могут включать в себя согласование нескольких команд. Например, одна команда может быть создана функциональность отчетности, связанной с новыми данными, которые мы собираем. Мы хотели бы освободить это нашим клиентам вместе, но не должны координировать развертывание их кода. Релизы также включают подготовку для внутренних заинтересованных сторон или общения для наших клиентов.
Мы включаем это разделение выпусков и развертываний с использованием переключения функций. Функциональные переключения позволяют нам скрыть функциональность для всех или порцию пользователей. Мы используем библиотеку с открытым исходным кодом, но есть много вариантов для управления переключением вашего кода. Наши развертывания стали намного более безопасными, поскольку накладные работы за функцией переключательными средствами мы можем развернуть инкрементные части элемента, а не в ожидании полной функции, и толкая большой корпус кода для производства одновременно. Переключает также гарантировать, что наша функциональность работает в производстве, не нарушая наших клиентов. Когда наша команда продуктов чувствует, что функция готова, они могут затем включить функцию, когда они готовы.
Метрики для успеха
Это небольшое количество множества изменений, которые наша организация сделала, чтобы стать более эффективными. Мы постоянно совершенствуем наши процессы, в том числе в том, как мы контролируем, оповещаем и тестируем. Мы быстро отвечаем нашим клиентам. Но что более важно, мы более уверены в нашей работе каждый день.
Мы начали с метрик, которые мы чувствовали, сделают наши команды успешными. Мы знали, что мы хотели оптимизировать для более частых развертываний и меньшем количества инцидентов, связанных с ними. Мы хотели минимизировать количество раз, когда мы исправили, как мы узнали, что в качестве неудачного выпуска. Мы хотели, чтобы частота, которую мы отправляем код, который будет разделен от частоты, которую мы выпустили клиентам. Прежде чем начать путешествие к непрерывной доставке, рассмотрите целей, которые вы пытаетесь достичь. Чтобы определить успех, создайте метрики, которые измеряют прогресс команды со временем. Эти цели должны иметь разумное окончательное государство. Например, сборка всегда может быть быстрее, но сколько времени успешно для вашей команды? Скорее всего, ответ будет уникален для использования инструментов, и домен вашего бизнеса.
Хотя путешествие может быть сложно, не сдавайся. Каждое улучшение опирается на себя. Мы обнаружили, что каждые шесть месяцев мы неузнаваемым к организации, мы были за шесть месяцев до этого. Мы более зрелая, но более шумная версия себя.
Оригинал: «https://dev.to/securingsincity/continuously-delivering-at-maxwell-health-57k»