Тысячи лет назад, еще до того, как люди жили в домах и когда динозавры все еще управляли землей, разработка программного обеспечения заняла много времени. Сначала вы разработали дизайн (выяснили, что вы хотите сделать и как вы собираетесь это сделать). Затем вы написали код. Затем вы провели тестирование (стадия проекта, когда люди притворяются, что смотрят на то, что вы создали, но на самом деле не обращаете внимания). Это приводит к изменениям, иногда радикальным изменениям в том, что вы сделали. Наконец, вы перенесли все в производство и начали работу (это также называется финальным тестированием, потому что теперь люди вынуждены обращать внимание).
Затем появился Agile. И Scrum. И худой И идея о том, что, может быть, было бы лучше, если бы весь цикл (проектирование, кодирование и тестирование) был сжат, чтобы вместо того, чтобы потратить несколько месяцев, чтобы получить что-то в руки пользователей, потребовалось бы, возможно, несколько недель.
Последний шаг в этом направлении (пока что) получил широкое название «Экстремальное программирование», где все кодирование должно было выполняться либо на больших высотах, либо на скейтборде. В рамках этого мы добавили этап развертывания к циклу быстрого разворота. И это то, где непрерывное развертывание подходит. По сути, идея непрерывного развертывания заключается в том, что функциональность переносится в производство, как только она закодирована и протестирована, чтобы ее можно было использовать (то есть действительно протестировать).
Различные Непрерывные Варианты
Если вы думаете, что ваша жизнь достаточно сложна, то вы можете сделать вид, что этот конкретный раздел не существует. Существует целый ряд похожих и в то же время разных терминов (особенно если вы говорите с экспертами), которые описывают все это. Разбей Драмамин и держись.
Если вы используете Google «Непрерывное развертывание», вы увидите множество ссылок на «Непрерывную интеграцию и непрерывную доставку». Они звучат одинаково, но, если вы слушаете экспертов, они действительно очень разные (что означает, что они в значительной степени одинаковы).
Непрерывная интеграция действительно относится к переднему краю процесса; создание, интеграция и тестирование кода в среде разработки.
Непрерывное развертывание описывается как нечто, где каждое изменение, которое проходит через конвейер развертывания, автоматически загружается в производство.
Непрерывная доставка, с другой стороны, когда все проходит через конвейер, но вы выбираете, когда это происходит, а не все время, как при непрерывном развертывании.
Преимущества непрерывного развертывания
Первое преимущество непрерывного развертывания заключается в том, что его продолжение сосредоточения Agile на небольших задачах как единое целое помогает снизить сложность развертывания. То есть легче переместить один модуль и два файла, чем 50 модулей и 100 файлов, что, как мы надеемся, приведет к меньшему количеству неудачных попыток развертывания.
Второе преимущество заключается в том, что снижается вероятность того, что вы и кто-то в вашей команде запутают свои задачи. Это особенно верно, если вы находитесь в большой организации со многими разработчиками, но вы не находитесь в ситуации, когда данный разработчик имеет полный и единственный контроль над данным приложением. Чем короче время, когда модуль извлечен и проработан до его запуска в производство, тем меньше вероятность того, что два разработчика будут проверять и отдельно обновлять один и тот же модуль.
Недостатки непрерывного развертывания?
Как мы хорошо знаем, у каждой розы есть свои шипы, верно? Поэтому у непрерывного развертывания также должны быть некоторые недостатки.
Для непосвященных (это касается каждого менеджера, на которого я когда-либо работал), Continuous Deployment — это код «кода низкого качества, который выдается, чтобы позволить пользователю плыть всю свою жизнь». Но правда в том, что непрерывное развертывание означает прямо противоположное. Основное предположение состоит в том, что быстро развернутый код будет чистым. Для этого требуется целенаправленный и дисциплинированный подход. Непрерывное развертывание не для хакеров или неискренних.
Еще одна вещь, о которой некоторые говорят, это то, что, хотя это может быть хорошей идеей, Continuous Deployment слишком сложно сделать. И в этом есть доля правды; Должна быть некоторая сложность, если вы перемещаете новый код в производство несколько раз в день автоматически и без сбоев. Но я не вижу, чтобы кто-либо жаловался на сложность нового BMW, когда двигатель выключается, когда он останавливается на красный свет, а затем снова включается автоматически, поэтому мы все должны быть в состоянии согласиться с тем, что сложность в порядке, пока как это работает и приводит к хорошему результату.
Начало работы с непрерывным развертыванием
Итак, что вам нужно для непрерывного развертывания? Кроме простой веры ребенка, то есть. К сожалению, непрерывное развертывание — это не просто идея, которую вы можете случайно реализовать. Вам нужны некоторые надежные процедуры и программное обеспечение.
Во-первых, вам нужна среда интеграции. Это сервер, который реплицирует производственную среду, предоставляя вам то, что вы можете протестировать в и с.
Во-вторых, вам нужен полный набор тестовых сценариев (это точка соприкосновения со многими людьми). Мы кодируем новый скрипт, запускаем их через пару очевидных вещей, и затем мы готовы к работе. Кто следит за тестами? Но это слишком опасно, если говорить о непрерывном развертывании. Вам необходимо иметь полный набор тестовых сценариев, предназначенных для поиска любых ошибок. Если у вас этого нет, даже не беспокойтесь.
В-третьих, вам нужен программный продукт, обычно называемый «программным обеспечением для сборки», который автоматизирует процесс добавления нового кода в существующий код, выполнения тестовых сценариев, уведомления о любых проблемах, а затем, если все идет хорошо. внедряя новый код в вашу производственную и тестовую среду. Примеры этого включают круиз-контроль, Jenkins, BuildBot, Bamboo и т. Д.
Вывод
Я не хочу, чтобы кого-то обманули. Непрерывное ничего не просто реализовать. Это требует реального обязательства. Требуются исчерпывающие тестовые сценарии. Это требует сложного программного обеспечения, чтобы сделать его автоматическим (и, следовательно, практичным). Но для людей в среде с несколькими разработчиками, где важно реагирование на запросы пользователей, где важны скорость и надежность изменений, непрерывное развертывание может стать вашим новым лучшим другом.
Изображение через Fotolia