Многие команды разработчиков пропускают, имея обстановку для применений. Они часто представляют PR, потенциально проводя тесты в системе CI, слияют, чтобы освоить, а затем развернуть в производстве. Если у них есть стационарная среда, это часто не является истинным отражением производственной среды из -за отсутствия усилий, сложности или расходов. Это рискованный трубопровод, потому что не существует истинной интеграционной среды или тестирования интеграции. Хуже всего то, что если есть проблема, разработчики могут участвовать в «ковбойском кодировании», чтобы попытаться решить проблему в своей живой производственной среде.
В этой статье мы обсудим некоторые преимущества использования истинной ставной среды в жизненном цикле разработки программного обеспечения, и почему им не нужно быть сложным для настройки.
Постановка — это еще одна среда, которую вы используете в процессе разработки и развертывания своего программного обеспечения. Вы развертываете в стационарной среде, прежде чем развернуть в своей производственной среде.
Постановка, как правило, предназначена для того, чтобы быть идентичны или почти идентичны производству. Это означает, что они имеют одинаковое оборудование, программное обеспечение и конфигурацию. Чем ближе вы сможете достичь этого, тем более полезной станет ваша постановка.
Этот уровень одинаковости между постановкой и производством гарантирует, что тестирование в вашей стадии отражает то, что произойдет в производстве при подобных обстоятельствах.
В отличие от среды для разработки или ограниченных тестирования интеграции, в промежуточных средах используются одни и те же сервисные и вниз по течению. Они также имеют одинаковую архитектуру, одинаковую шкалу и имеют очень похожие или идентичные конфигурации в производственной среде.
В зависимости от любых регулирующих факторов (таких как требования GDPR) и уровень способности вашей организации анонимность данных, в стационарной среде может быть даже анонимизированная или полная наборы производственных данных, чтобы более близко имитировать реальную производственную среду. Это означает, что стационарная среда, как правило, не выпущена и не доступна для вашей базы пользователей производства, а скорее предоставляется внутренней или пилотной пользовательской базе.
Чтобы контролировать затраты, вы можете развернуть в своей стадирующей среде как часть цикла выпуска, а затем разрушить его после того, как релиз перенесен на производство.
Эта методология дает вам возможность обнаружить любые проблемы с качеством кода, более высокий уровень проблем качества данных, проблемы интеграции и или другие проблемы зависимости, которые просто не присутствовали или не были очевидны в среде тестирования интеграции или в более низких условиях локальных или разработчиков.
Эта методология также дает вам возможность с высокой уверенностью предсказать, независимо от того, будет ли ваше производственное развертывание даже успешным, что позволит вам ответить на такие вопросы, как «Пойдет ли этот новый сервис, который мы написали, когда он запускается в производстве? » Если, например, библиотеки, которые мы использовали, работали на наших компьютерах, но не работают так же на виртуальной машине Linux, которые мы используем для развертывания.
Работа с постановкой окружающей среды заставляет вас проверять все предположения, которые вы сделали во время разработки, и гарантировать, что у вас были соответствующие учения мысли, необходимые для обеспечения успеха развертывания.
Традиционное развертывание с постановкой среды
В любом случае, когда вы его сокращаете, тестирование локально или выполнения модульных тестов не является достаточным лакмусовым тестом для качества и функциональности вашего продукта. Модульные тесты написаны людьми, а люди ошибочны. Если вы тестируете только на известные проблемы, то вы не можете покрыть проблемы, о которых не знаете.
Люди часто забывают об изменениях, которые пересекают границы обслуживания или засунуты над зависимостью с пользователями Upstream и миграциями базы данных. Иногда библиотека, которую вы используете, может работать на вашей локальной машине, но не может работать в облаке, и единственный раз, когда вы выясните, что сбой зависимости — это когда вы развертываете производство.
Часто набор данных, тестируемый в более низких условиях, является нереалистичной симуляцией того, что находится в производстве. Некоторые люди могут подумать, что стационарная среда не требуется при использовании канарейских или синих/зеленых развертываний, так как проблема будет поймана рано, но вы все еще подвергаете пользователей ошибкам и неправильным фигурациям.
В целом, это подвергает пользователей потенциально нарушать изменения, и в зависимости от уровня изменения, это может повлиять на производственные данные или другие зависимые службы и процессы.
Опираясь на веру и надежду как на политику для обеспечения успешного производства развертывания производства неизбежно рискует создать негативное восприятие качества вашего продукта и в конечном итоге привести к потерянным продажам, истощению клиентов и возможным нарушениям ваших клиентских SLA.
Затраты, связанные с этими типами развертывания или сбоев кода, могут включать:
- Необходимость предоставлять немедленные горячие постройки
- Отказы назад релизы
- Влияние на временные рамки развития
- Потенциальная потеря данных
- Негативное влияние на пользователь
- Пропущенные SLAS
- Репутационный/риск бренда
- Потерянные транзакции/продажи
- Потеряли клиентов
Преимущество, которую вы получаете от использования в стационарной среде, является более высокая степень обеспечения качества и удовлетворенность клиентов. Кроме того, уменьшив удар или количество ошибок в вашем продукте, вы можете увидеть много косвенных экономии затрат. Например, вы можете сократить количество времени, которое вы должны потратить потенциально откатываемые изменения или сократить время, затрачиваемое на предоставление своевременных горячих сфере, которые также могут повлиять на ваши регулярные циклы разработки, вытягивая разработчиков, чтобы решить проблему. Вы также сохраняете стоимость потенциальных проблем с устранением неисправностей в производстве, и время, потерянное в ответ на запросы пользователей или отчеты об ошибках.
Давайте пройдемся по некоторым потенциальным сценариям, которые можно легко предотвратить, если вы используете стационарные среды. Мы работаем с приложением под названием Индекс цен на биткойн , Марк Чавес. Это простое приложение на основе React, которое подключает пользователя к Coindesk API для предоставления информации о тенденциях для цен на биткойны на основе выбранной валюты.
1. Неправильные сервисные URL
В нашем первом сценарии, выполняя разработку в нашей более низкой (разработке/локальной) средах, мы указываем наше приложение на Mock Coindesk API -услуги, чтобы сократить использование API и контроль. Этот URL должен указывать на настоящий API Coindesk перед развертыванием до производства.
Как вы можете видеть выше, этот фиктивный URL каким -то образом попал в наш основной код приложения сервиса. (Плохая практика, я знаю, но это происходит чаще, чем вы думаете!)
Это нарушающее изменение сработало бы в средах разработчиков, так как максимальный URL -адрес, по -видимому, был бы доступен в сети разработчиков. В стационарной среде, которая имитирует производство, такая зависимость от обслуживания не было бы там, и это нарушительное изменение было бы поймано, прежде чем перейти непосредственно к производству.
Это основная ценность наличия в стадирующей среде: предотвращение перерыва от перехода к производству, предоставляя вам зеркальную среду для проверки и проверки ваших изменений.
2. Ошибки в управлении источниками и обзорами
Давайте посмотрим на другой пример: два разработчика совершают новые функции, которые имеют одинаковые имена стилей, но в разных строках файла CSS. В индивидуальной филиале каждого разработчика стили и последующий продукт выглядят как ожидалось.
Однако, когда каждый разработчик выпускает запросы, чтобы объединить это обратно в разработку, перекрывающиеся стили не подбираются во время обзора, поскольку они находятся в разных запросах на притяжение. Они объединяются неправильно и развернуты в производстве. Конечный результат оставляет продукт в нежелательном состоянии.
3. Неудовлетворенные зависимости
Наконец, давайте погрузимся в старое выражение разработчика «Это сработало на моей машине».
Здесь разработчик добавил Imagemagick в стек для обработки модификации изображений профиля, загруженных на сайт. Связанная библиотека NPM ImageMagick » ImageMagick » была установлена и сохранена в Package.json, но в основе Imagemagick-cli был установлен только на машине разработчика.
Таким образом, при тестировании локально функциональность работала точно так же, как и ожидалось, но при продвижении к производству функция не работает, и следующие ошибки привели к журналам.
Error: Command failed: CreateProcessW: The system cannot find the file specified
Без этапонной среды этому типу проблемы легче сделать ее до производства.
Конечная реальность всех этих примеров заключается в том, что все они являются полностью предотвратимыми ошибками. Эти ошибки неизменно случаются, и могут быть не пойманы до производства, если нет в стадической среде. По мере того, как ваше приложение растет в сложности, потенциал для этих типов ошибок также растет в геометрической прогрессии.
Использование стационарной среды как часть вашего SDLC и жизненного цикла развертывания может снизить риск того, что эти ошибки являются публичными ошибками или частными.
Одним из распространенных оправданий для того, чтобы не использовать стативную среду, является то, что они слишком сложны или дорого, чтобы настроить. В этом есть некоторая правда, поскольку они могут быть дополнительными расходами. Связанные DevOps могут быть дорогостоящими усилиями, а стационарная среда может быть так же трудно настроить, как и ваша производственная среда. Однако это не должно быть.
Современные облачные платформы обеспечивают возможность развернуться в постановке по мере необходимости и позволяют автоматизировать их развертывание, чтобы они были частью ваших стандартных трубопроводов развертывания. Они могут предотвратить ошибки, которые нарушили бы производство или блокировали его развертывание.
Самый простой способ начать — принять современных облачных провайдеров и их инструментов DevOps, такие как Хероку трубопроводы , что может сделать развертывание простых средств простыми, еще более рентабельными и относительно безболезненными.
Heroku Pipelines — это продукт от Heroku, который позволяет вам управлять группой приложений Heroku, которые имеют ту же базу кода. Каждое приложение в трубопроводе представляет собой состояние в вашем жизненном цикле доставки. Heroku автоматически разворачивает промежуточную среду, когда вы развертываете свою главную филиал. После того, как вы проверьте приложение, продвижение до производства так же просто, как нажать кнопку.
Альтернативные методы автоматического развертывания стабильных среда включают инфраструктуру в качестве решений для оркестровки кода и контейнеров, таких как Terraform или Kubernetes.
Без автоматического процесса, чтобы упростить этот процесс для нас, нам придется предоставить машины или контейнеры, которые были идентичны нашей производственной среде, а затем развертывали их вручную.
В конечном счете, использование стационарной среды помогает вам использовать современные методологии разработки программного обеспечения и выпуска для повышения производительности вашей команды. Что еще более важно, это помогает улучшить качество продукта, который вы предоставляете клиентам.
Оригинал: «https://dev.to/heroku/staging-environments-are-overlooked-here-s-why-they-matter-3ghd»