Рубрики
Uncategorized

Преимущества непрерывной доставки

За свою карьеру в качестве разработчика программного обеспечения я видел The Release Comternuty Inc … Tagged с помощью работы, непрерывной передачи, развертывания, DevOps.

За свою карьеру в качестве разработчика программного обеспечения я постоянно увеличивался частота выпуска. Когда я начал, потребуется от 12 до 18 месяцев, чтобы новые функции достигли клиента. Спустя годы частота увеличилась, поэтому развертывание производства происходило каждые три недели. В течение последних двух лет мы использовали непрерывную доставку на работе. Это означает, что как только функция будет готова (реализована, просматривается код и протестированная), она развернута для производства. Непрерывная доставка, безусловно, наилучшим образом, на мой взгляд, и вот почему:

Преимущества

Более низкий риск. Причина, по которой я люблю развернуть каждую новую функцию, как только это будет сделано, заключается в том, что она снижает риск. Каждый раз, когда вы меняете программное обеспечение, существует риск, что ошибки вводятся. Если развертываемое изменение мало, кода меньше, чтобы просмотреть в случае проблемы. Если вы развертываете новое программное обеспечение каждые три недели, есть гораздо больше кода, который может вызвать проблему. Если проблема не может быть найдена или исправлена быстро, также намного проще вернуть небольшое развертывание, чем большое развертывание.

Свежо в моей голове. Если я развернут новую функцию, как только она будет готова, все в ней свежее. So if there is a problem, trouble shooting is easier than if I have worked on other features in between. Это также освобождает умственную энергию, которая будет полностью сделана с помощью функции (включая развертывание для производства). Я могу сконцентрироваться на одной вещи за раз, а не многозадачно.

Функции достигают клиентов быстрее. При прочих равных, чем быстрее функция достигает клиента, тем лучше. Наличие функции, готовой к производству, но не развертываю ее, является расточительным.

Более быстрая обратная связь. Чем раньше клиент начнет использовать новую функцию, тем раньше вы услышите, что работает, что не работает, и какие улучшения им понравятся. Очень часто следующие функции, которые будут разработаны, неизвестны, пока клиент не опробовал текущую функцию и не предоставила обратную связь. Кроме того, столь же ценным, как и тестирование, оно никогда не бывает так хорошо, как запуск нового кода в производстве. Конфигурация и данные в производственной среде выявят проблемы, которые вы никогда не найдете при тестировании. Следовательно, чем раньше он развернут, тем раньше вы сможете найти, и решить оставшиеся проблемы в коде.

Предварительные условия

Для постоянного развертывания работы есть много предварительных условий, которые необходимо выполнить. Без них трудно или невозможно непрерывно развертывать новый код.

Центральные серверы. Система должна быть основана на облаке или запускаться с центральных серверов. Если система будет запущена в помещениях клиента и под их контролем, она, очевидно, не будет работать над развертыванием новых версий много раз в день.

DevOps Culture. Непрерывная доставка работает лучше всего, когда разработчики, создающие новые функции, являются теми, кто их развертывает. Там нет никаких передач-тот же человек пишет код, тесты, развертывание и отладки, если это необходимо. Эта цитата (от Werner Vogels, технический директор Amazon) прекрасно подводит итог: «Вы построили ее, вы запускаете».

Автоматизация. Когда вы вступаете в производство много раз в день, развертывание должно быть быстро и просты. Это означает, что почти вся механика создания нового выпуска и развертывания должна быть автоматизирована, чтобы избежать ручных шагов. Остальная часть системы также должна поддерживать быстрые сборки и развертывание. На работе мы используем Docker и Kubernetes, что работает очень хорошо.

Обновления. Если система недоступна во время развертывания программного обеспечения, вы подумаете дважды перед развертыванием. Чтобы избежать этого, система должна быть настроена, чтобы вы могли развернуть новый сервер функций на сервере, без прерывания службы.

Ревертируемый. Должно быть легко вернуться к предыдущей версии программного обеспечения в случае возникновения проблем с новым развертыванием. Если легко развернуть новую версию, то это обычно не проблема — вы просто используете ту же систему для развертывания старой версии.

Зная, что работает. Когда работающая версия программного обеспечения меняется несколько раз в день, важно иметь возможность сказать, что это такое. Это означает, что и знание того, что в настоящее время работает, так и знание, когда были внесены изменения. На работе мы используем номера версий в сочетании с Git Hashs программного обеспечения. Кроме того, каждое развертывание программного обеспечения совершается в отдельном файле версий.

Но…

Ошибки. Некоторые люди, особенно когда они использовались для запланированных выпусков, чувствуют себя неловко по поводу непрерывных поставков. Разве нет больше ошибок в результате этих частых выпусков? По моему опыту, нет, сейчас нет больше ошибок. В запланированных выпусках были случайные ошибки, а при постоянном развертывании иногда возникают ошибки. Разница сейчас в том, что когда есть ошибки, их легче и быстрее найти и исправить.

Впитывание. Но как насчет того, чтобы позволить новым функциям «впитаться» в тестовой среде некоторое время, прежде чем выпустить их? Разве это не раскрывает скрытые ошибки? Это аргумент, который работает лучше в теории, чем на практике. Прежде чем рассмотреть функцию выполненной, вы выполняете все тесты, о которых вы можете подумать, чтобы убедить себя, что она работает, как и ожидалось. Вполне возможно, что есть ошибки, которые можно найти в тестовой среде, даже если вы их не ищете, но на практике это почти никогда не происходит. Гораздо более вероятно, что любые оставшиеся ошибки будут найдены только тогда, когда эта функция будет использоваться в производстве, с реальной конфигурацией, данных и шаблонами трафика. Таким образом, другие преимущества частых развертываний перевешивают потенциал обнаружения скрывающихся ошибок, откладывая развертывание.

Вывод

Как разработчик, я хочу сделать все возможное, чтобы убедиться, что создаю функции без ошибок как можно быстрее. Непрерывная доставка — это способ работы, который помогает в этом отношении. Развертывание одной функции за раз значительно снижает риск каждого развертывания. Если есть проблема, код свежий в моей голове, а изменения по сравнению с предыдущим развертыванием небольшие, поэтому устранение неполадок намного проще. Кроме того, он получает функции для клиента быстрее, что также обеспечивает более быструю обратную связь. Сравнивая запланированные релизы с непрерывной доставкой, я предпочитаю непрерывную доставку.

Оригинал: «https://dev.to/henrikwarne/benefits-of-continuous-delivery-5h2m»