При непрерывном развертывании пропускается такой этап производства ПО, как контроль операций. Таким образом, функции администратора переходят к инструментам автоматизации, которые должны обеспечить создание кода без ошибок прежде, чем ошибки проявятся. Данная проблематика обсуждается на портале TechTarget.
Подразделения DevOps постоянно играют словом «непрерывно», делая его синонимом быстрой передачи кода в производственную среду.
Непрерывное развертывание (continuous deployment) ПО, при котором обновления кода сразу включаются в производственную систему, является конечной целью многих, но мало кто этого достиг. На этом пути имеется множество препятствий. Одно из них — инструменты непрерывного развертывания.
Хотя развертывание является завершающим этапом, непрерывное развертывание требует применения инструментов с самого начала (например, для контроля версий), далее при сборке и тестировании и вплоть до приемки развертывания.
Сервисы, требующие выбора инструментов непрерывного развертывания, можно сгруппировать в три категории:
- контроль версий;
- автоматизация сборки и тестирования;
- развертывание с тестированием.
Инструменты могут относиться к одной или нескольким категориям, но для непрерывного развертывания они должны быть представлены во всех трех.
Отслеживание версий кода
Контроль версий необходим не только для непрерывного развертывания, но и для практически любого проекта разработки ПО. Инструменты контроля версий позволяют разработчикам регистрировать или фиксировать изменения. Затем эти изменения отслеживаются, что предотвращает появление таких имен файлов, как feature.bak и feature2.bak2. Полная история версий прилагается к каждому файлу, что позволяет разработчику в любой момент вернуться к определенному состоянию кода.
Контроль версий позволяет создавать ветки кода. Разработчик может как угодно менять код ветки, не беспокоясь о других ветках. Завершив работу над веткой, можно перенести изменения в исходный код, воссоздав единую ветку.
Имеются различные инструменты управления версиями. К наиболее популярным относятся распределённая система управления версиями Git и веб-сервис GitHub. При использовании Git разработчики регистрируют код в репозитории, который создают на своем локальном компьютере, и могут пользоваться всеми типовыми функциями инструмента контроля версий, такими как регистрация кода, создание веток и слияние кода.
Синхронизация локальных репозиториев способна вызвать головную боль. Поэтому GitHub связывает локальные репозитории воедино. Кроме того, GitHub предоставляет дополнительные сервисы, такие как запросы на добавление кода, отслеживание ошибок и функций, хранение документации. GitHub сделал Git популярным и упростил новичкам начало работы с репозиториями Git.
Автоматизированная сборка кода
После того, как код зарегистрирован в системе контроля версий, его необходимо собрать, т. е. превратить код и артефакты в пригодное для конечного пользователя ПО. Инструменты сборки могут решать такие задачи, как компилирование кода, создание пакета и объединение различных библиотек. Каждый инструмент решает эти задачи несколько отличным от других образом.
Любой заслуживающий внимания инструмент автоматизации сборки имеет функцию тестирования. Модульное тестирование исполняет код в различных контекстах всеми возможными способами. Оно гарантирует, что с недавними изменениями не были внесены ошибки. Это важно при непрерывном развертывании, когда обновления немедленно вносятся в производственную систему без вмешательства человека. При непрерывной поставке (continuous delivery) внесение изменений в код вызывает остановку операций для оценки кода перед релизом.
Какой инструмент автоматизации сборки будет оптимальным, зависит от особенностей проекта. MSBuild популярен для проектов с ПО Microsoft. Team Foundation Server и Visual Studio Team Services (VSTS) также обладают некоторыми популярными функциями непрерывной интеграции. Для проектов с открытым кодом популярны Jenkins, TravisCI и TeamCity.
Развертывайте надежный код
Развертывание — заключительная и самая важная фаза непрерывного развертывания. На данном этапе инструмент доставляет результат работы сборки на производственные серверы или обновляет производственную среду в облаке.
Инструменты непрерывного развертывания, такие как Jenkins, VSTS, Octopus Deploy и AWS CodeDeploy, развертывают код в производственной системе с помощью скриптов и немедленно осуществляют интеграцию и приемочное тестирование. Поскольку это важнейший момент, все инструменты развертывания кода поддерживают процедуры тестирования. Инструменты тестирования позволяют инженеру или разработчику сборки/релиза лично развернуть код в производственной среде и немедленно запустить пакет тестов, дабы убедиться, что все работает как задумано. Эти тесты подтверждают, что код функционален, что порой трудно установить.
Развертывание и конфигурирование производятся с помощью ИТ-инструментов управления автоматизацией и настройкой, таких как Puppet и Ansible. Интеграция и приемочные испытания осуществляются после развертывания. Инструменты мониторинга, например разработанные компаниями AppDynamics и Splunk, отслеживают любые вызванные новым кодом изменения производительности приложений и/или инфраструктуры и могут запускать ИТ-инструменты реагирования на инциденты и управления ими, такие как PagerDuty. Для непрерывного развертывания настройки мониторинга и реагирования на инциденты должны быть как можно ближе к реальному времени, чтобы сократить период восстановления.
Если что-то пойдет не так, хороший инструмент непрерывного развертывания должен иметь функцию отката — отмены всех изменений и возврата к предшествующему состоянию.
Без риска нет награды?
Непрерывное развертывание является наиболее быстрым способом включения ПО в производственную систему, но кто-то может сказать, что также и самым рискованным. Инструменты непрерывного развертывания в значительной мере устраняют риск благодаря инкорпорированной поддержке тестирования во всех точках процесса развертывания. Некоторые из них автоматически направляют заинтересованным лицам уведомления о прохождении приемки. Однако запросы на такие уведомления представляют отклонения от процесса непрерывного развертывания.
Одни организации предпочитают использовать коллекцию инструментов для управления различными этапами процесса, другие применяют один инструмент на всех этапах. При выборе инструмента учитывайте необходимость обслуживания всего процесса, культуру организации, квалификацию сотрудников и допустимость сбоев.