Рубрики
Uncategorized

Ссыпать время развертывания Buildkite на 75%

На месте обмена мы используем Buadingkite в качестве непрерывной интеграции и платформы непрерывной развертывания … Теги с Buadlekite, Sre, Docker, Devops.

На Поместите обмен мы используем Buildkite В качестве непрерывной интеграции и непрерывной развертывания платформы для развертывания нашего приложения Django на AWS. Мы используем трубопроводы Buildkite для развертывания приложений на всех доступных средах, включая разработку, QA и производство. Прежде чем внести какие-либо изменения, среднее время сборки и развертывания по всему этими средам было около часа. Используя множество тактических исправлений, мы привели это до Около 15 минут, что привело к снижению почти на 75% в нашей строке. Это история того, как мы туда попали.

Почему мы начали смотреть в эту проблему?

Это все началось, когда мы решили добавить новую среду QA, в основном для целей тестирования нагрузки, как часть трубопровода Buaderkite. Добавление среды QA внезапно увеличилось время в развертывании функций в производственную среду, прежде всего из-за того, что были дополнительные шаги сборки, которые потребляли дополнительное время сборки. Это привело к жалобам от разработчиков, которые сказали, что процесс развертывания занял слишком много времени, и что задерживает развертывание исправлений и новых функций. Хотя мы хотели, чтобы развертывание к окружающей среде QA составляла часть одного и того же трубопровода, мы также хотели минимизировать время высказки к производственной среде.

Наши первоначальные наблюдения

Последовательное развертывание трубопровода

Перед параллельным анализом приложений и развертыванию DEV/QA мы использовали для выполнения различных шагов в нашем развертывании трубопровода последовательно.

В результате время, необходимое для запуска прикладного трубопровода, было

  • В Best Case (все шаги используются Caching Catching Docker, чтобы построить изображение докера): ~ 50 минут
  • В худшем случае (нет шагов использует кэширование докера, чтобы построить изображение докера): ~ 1 HR.

Слои докера вызывают увеличение времени сборки

При строительстве изображения Docker шаги по инструкции в вашем DockerFile, выполняя каждую инструкцию в указанном порядке. Поскольку каждая инструкция изучается, Docker ищет существующее изображение в своем кэше, который он может повторно использовать, а не создавать новое (дублирующее) изображение. Чтобы узнать об этом более подробно, Go здесь

Наблюдалось, когда объединители Докера в первый раз привыкли (когда они запускаются), он загрузил изображения из сети, поскольку на агенте не присутствовал ни один кэшированный слой. Это привело к дополнительному времени для выполнения шагов сборки. Кроме того, комбинации первого использования агентов построения по нескольким шагам привели к вариациям в целом время сборки.

Исправлять проблему и как мы сделали наши сборки быстрее

Запуск рабочих мест сборки в Parallel — это простая техника для уменьшения общего времени работы вашей сборки и Buildkite предоставляет множество вариантов для этого. Существует несколько шагов, участвующих в процессе сборки и развертывания. Хотя мы можем запустить некоторые из них параллельно, они должны быть решены на основе нескольких критериев. Мы использовали некоторые из этих вариантов ниже, чтобы оптимизировать общее время сборки в разных средах.

Параллельное тестовое исполнение

Организаторы и интерфейсные испытания могут быть выполнены отдельно, поскольку они независимы друг от друга. Однако результаты этих двух наборов тестов загружаются на код климата для генерации доклада целостного тестирования. К счастью, Agentkite Agent имеет Артефактная поддержка Для хранения и извлечения файлов между различными шагами в конвейере сборки. Используя эту функцию, где мы можем передавать информацию между двумя параллельными шагами Budkkite, мы импортировали результаты тестов (поддерживаются как артефакты по сборке шага), объединили их к одному, а затем загрузили его на код климата.

После этого изменения строят время сокращено от ~ 1 час до ~ 35 минут, приводя к снижению на 42%.

Параллельное развертывание в независимые среды

В зависимости от использования окружающей среды в вашей настройке SDLC среды могут быть использованы для различных целей с различной степенью приоритета. Хотя мы используем среду Dev в классическом смысле использования его в качестве среды песочницы, мы используем среду QA исключительно для целей тестирования нагрузки.

В Buckkite несколько агентов можно использовать для запуска различных независимых шагов параллельно. Используя этот подход, мы обновили конвейер нашего приложения для развертывания в средах DEV и QA параллельно, что значительно снижает время сборки.

Убедитесь, что выполнение только специфичных веществ шаги в трубопроводе развертывания

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

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

После этого изменения составьте время сокращены от ~ 35 минут до ~ 16 минут, в результате снижения 54%.

Измерение успеха

После применения всех оптимизаций и изменений, упомянутых выше, общее время, необходимое для запуска трубопровода приложения,

  • В лучшем случае (все шаги используются Caching Chaching Docker, чтобы построить изображение Docker): ~ 16 минут

  • В худшем случае (нет шагов используют кэширование докера, чтобы построить изображение докера): ~ 25 минут

Дайвинг на более подробную информацию, специфично для филиала Master & Flations —

На главной ветке

В приведенной выше графике X-Axis обозначает временную диапазон сборки главного ветви, а ось Y обозначает время, предпринимаемые мастер-филиалом.

Как видите, до 13 марта сборки используются для завершения ~ 50 минут до 1 часа. После 13 марта, где мы выдвинули изменения оптимизации сборки, вы заметите время, сокращенные в ~ 17 мин до ~ 25 мин.

Выделение некоторых исключений на графике выше —

  • С 21 февраля до 25 февраля мы использовали отдельный трубопровод, потому что мы были в процессе миграции нашего заявления от роя до Куберанес. В течение этого процесса у нас был легкий трубопровод для развертывания KUBE, который вызвал более низкое время сборки.
  • От 23 марта и 26 марта два строительства заняли ~ 1 час для завершения, после проверки было замечено, что они бегали без кэширования слоя докера. Это было то, что сократило нас по пути кэширования докера слоя, и, кроме того, мы обнаружили, что на хостах появилась медленная сеть, которая управляла нашими агентами Buadlekite. Медленная сеть была следствием использования типа экземпляра T3.Medium для хостов BK, которые обещали «до 5 Гбит/с» производительности сети, и такая деградация производительности происходит очень нечасто.

На функциональных ветвях

В приведенной выше графике X-Axis обозначает временное диапазон по сравнению с сборки, а ось Y обозначает время, предпринятое сборкой. До 11 марта 2020 марта построится на немастых ветвях, используемых для завершения ~ 15 мин до ~ 20 минут.

Первые изменения в создании оптимизации I.E. Выполненные тесты параллельно были выпущены 6 марта и после 11 марта 2020 года, почти все филиалы были обновлены с этим изменением. После 11 марта 2020 года, Время сборки уменьшается в ~ 10 мин до ~ 15 мин диапазон, что привело к улучшению ~ 33% в строю

Выделение некоторых исключений на графике выше —

  • Некоторые сборки после изменения заняли ~ 15 минут до завершения, то есть потому, что они бегали без кеша Docker слоя.
  • 17 марта 2020 2020 года одна сборка заняла ~ 20 минут, поскольку этот филиал не был обновлен с изменениями, сделанными для оптимизации сборки.

Следующие шаги

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

  • Выполнение того же этапа сборки параллельно по нескольким агентам
  • Уменьшение времени сборки докера изображения путем осматривать DockerFile и потенциально удаление анабимых пакетов из DockerFile. Сегодня это работают на основе инфраструктурных шагов, которые не являются строго связанными с применением.

Спасибо за прочтение!

Оригинал: «https://dev.to/placeexchange/slashing-buildkite-deployment-time-by-75-5cd5»