Деплой — это процедура развертывания программы в рабочем окружении. Рабочее окружение — это место, где программа будет располагаться, запускаться и быть доступной для пользователей. Деплой свойственен всем программам, которые работают из сети. Например, разместить сайт на хостинге и опубликовать его — это и есть деплой сайта.
Деплой кажется простым процессом. Задеплоить сайт на хостинге — занятие на несколько минут, если сайт готов. Деплой простой, когда дело касается небольшого сайта, например, личного блога на Wordpress, который веб-разработчик собрал самостоятельно за день. Но когда дело касается больших проектов, над которыми трудятся десятки программистов, тогда деплой не выглядит простым и у него есть даже собственный жизненный цикл.
Что такое деплой?
Когда дело касается больших проектов, над которыми работают десятки разработчиков, тогда процесс разработки и деплоя программы крутится в сложной системе из разных этапов и инструментов. Например:
код программы разрабатывается на устройстве разработчика;
чтобы запустить код для проверки, его отправляют в специальную среду запуска; по сути, это некий сервер или десятки серверов, если приложение сложное;
перед отправкой кода в среду запуска его добавляют в репозиторий для контроля версий;
если версия программы в репозитории считается работоспособной, тогда ее деплоят на рабочих серверах;
работа над программой продолжается, и все изменения тестируются на среде запуска и фиксируются в репозиториях;
как только удается достичь стабильности в коде, его обновляют на рабочих серверах, то есть опять происходит деплой программы в виде ее обновления.
Когда происходит первичный деплой программы, тогда программа впервые становится доступной в сети. Этот процесс еще называют релизом или публикацией. Когда в программу внедряются обновления — это тоже деплой, хотя по сути происходит замена кода программы на рабочих серверах и базах данных. Деплой может быть простым, если программа расположена в одном месте на централизованных серверах. А может быть сложным, если программа расположена на независимых распределенных серверах. Деплой может происходить вручную, когда разработчики самостоятельно обновляют или публикуют файлы программы. Но также деплой может быть автоматизированным, когда применяются специальные платформы, упрощающие деплой, например платформа Heroku.
Этапы деплоя
Как мы уже писали, деплой может быть простым, а может быть и сложным. Каким будет деплой — зависит от сложности разворачиваемой программы.
Если деплой сложный, тогда он состоит из нескольких этапов. Например, таких:
Доставка кода на сервер. Этот процесс может быть выполнен несколькими путями. Простой путь — копирование файлов программы на сервер с Git-систем или с рабочих устройств разработчиков. Это актуально для небольших программ. Но чаще всего доставка кода на сервер осуществляется автоматизировано при помощи тех же Git-систем или при помощи пакетных менеджеров.
Обновление базы данных. Сейчас редко какое приложение не использует базу данных. Поэтому деплой приложения требует обновления кода в базах данных. Для этого обычно пишут специальные SQL-скрипты, которые запускают во время или до того, как происходит деплой.
Перезапуск приложения. Если во время деплоя происходит обновление приложения, значит, будет момент, когда старая версия приложения отключится и запустится новая версия. Некоторые программы так и обновляются: останавливают старую версию и обновляют ее. При таком подходе приложение останавливается на короткое время и происходит простой. В некоторых случаях такой подход чреват для бизнеса, поэтому применяют безостановочный подход в обновлении.
Автоматизация деплоя. Чем больше приложение для деплоя, тем меньше должно быть ручного труда, так как ручной труд — это лишняя трата времени. А скорость в развертывании и внедрении обновления решает многое. Чем быстрее, тем лучше для пользователей и самого приложения. Автоматизируют деплой при помощи разных утилит и программ. Уровень автоматизации деплоя дошел до того, что деплой можно настроить в непрерывном потоке, когда приложение не останавливается для обновления, а внедрения обновлений происходят постепенно.
Непрерывное внедрение деплоя
Когда деплой первичный, тогда все ясно: доставили код на сервер, настроили и запустили приложение. Но когда деплой вторичный при внедрении обновлений, то процесс может быть сложным. Мы писали, что самый простой способ деплоя — это остановить на время старую версию программы, обновить ее, а потом запустить новую. Но в некоторых случаях это критично для пользователей и самого приложения, поэтому была разработана система непрерывного внедрения деплоя.
При таком подходе приложение не останавливается, но обновляется. По факту работают обе версии программы: старая и новая. Как только приходит оповещение, что новая версия программы работает без ошибок, тогда старая версия отключается, а пользователей «переводят» на обновленное приложение. Такой подход довольно сложный в выполнении. Для него нужен следующий потенциал:
развитая инфраструктура с балансировщиком, который будет контролировать трафик между разными версиями программы и серверами, где будут располагаться эти программы;
автоматизированный деплой при помощи специального софта;
единая культура написания кода, чтобы версии программы «дружили» между собой и были совместимыми;
база данных, совместимая с разными версиями программы, чтобы внутри БД ничего не приходилось удалять, обновлять или переименовывать для новой версии.
Заключение
Деплой может быть разным по сложности. Но по факту он обозначает один и тот же процесс — развертывание программы на серверах, делая ее доступной для пользователей. Такой программой может быть что угодно: веб-сайт, веб-приложение, игра или приложение для мобильного телефона. Правильный деплой — важная для всех процедура: для пользователей, разработчиков и самого приложения.
Другое