Рубрики
Без рубрики

Как ускорить повторные сборки узла, используя Docker Multi-Stophing Builds

Джоном в центре ожидания, как ускорить узел повторно наращивания, используя Docker Multi-Stepe BuildsPhoto by Thanos PAL на Unsplashreinstalling NPM зависимостей может быть расточительным использованием времени и денег. В зависимости от размера вашего проекта это может занять несколько минут. В моем личном опыте я видел НПМ

Автор оригинала: FreeCodeCamp Community Member.

Джоном в центре

Переустановка NPM Зависимости могут быть расточительным использованием времени и денег. В зависимости от размера вашего проекта это может занять несколько минут. В моем личном опыте я видел NPM установить Возьми вверх в 5 минут. Теперь, если у вас есть отдельные этапы (ворота, CI, разные ветви окружающей среды) к вашему трубопроводу, это время ожидания становится еще хуже. Все шутки кроме картины ниже, ожидание дороги!

Отходы дорогие, очень дорогие

TL; доктор

Это значительная сумма денег (~ $ 9 918/год на разработчик ) и время (18,792 минуты в год или 13,05 дня в год), которые потрачены впустую в ожидании установки зависимостей, пока наш код пройдет через свой трубопровод. Эти цифры в среднем 4 регионата в день. На нижнем положении, ожидая ворот, это ~ $ 3 132/год за разработчик Отказ См. Расчеты ниже, где я получил эти цифры.

Давайте сделаем быструю математику, чтобы увидеть, почему 5 минут – большая проблема. Предположим, у вас есть ворота, а CI Build для вашей 2 окружающей среды (постановка и производство). Каждый этап требует, чтобы вы наступили чистую сборку.

Так что давайте добавим, как долго мы ждем NPM установить завершить:

Время сборки: 1 минуту Ворота: 5 минут Постановка CI: 5 минут Производство CI: 5 минут Время ожидания NPM: 15 минут Общее время сборки: 18 минут

Хорошо, поэтому 18 минут не кажется, что плохо. Это кофе-брейк, и мы все любим кофе. Но что 18 минут – это простое время, время, ожидающее чего-то, чтобы выйти из двери.

Теперь давайте немного расширем эту математику и умножьте небольшую команду (4 разработчикам), а для развлечения мы подумаем о среднем сумме и почасовой ставке. Время – деньги, верно? Среднее количество проверки – это то, что я видел в моей дневной работе, и ваши цифры могут варьироваться.

Время сборки: 3 минуты Время ожидания NPM: 15 минут разработчики: 4 AVG. Check-Ins: 4 почасовая ставка: 30 долларов (ваша почасовая ставка может быть выше)

Время ожидания ворот: 96 минут (Ворота ожидания времени х разработчики x avg check-ins) Стоимость ворот: $ 48 (время ожидания ворот в часах x почасовая ставка) Общее время: 288 минут (сборка и NPM Time X Разработчики X AVG Check-Ins) Стоимость: $ 144 в день (Общее время в часах x почасовая ставка)

Итак, мы смотрим $ 144/день простоя, или 720 долларов в неделю, или $ 37 584/год Отказ И это ждет нашего программного обеспечения для отправки! На низком конце, если мы зарегистрируемся в нашем коде и дождимся ворота, это $ 12 528/год Отказ Ики! Ежегодная стоимость была основана на 261 американских рабочих днях в году ( https://hr.uiowa.edu/payroll/2015-fiscal-year-payroll-calendar )

Давайте кэш и построить эту вещь!

TL; доктор

Вот мои инструкции о том, как бежать. https://github.com/jstandish/cached-node-module-build-example/blob/master/docker_build.md.

Хорошо, мы установили, что ожидание вещей дороги. Так как таковой, мы должны попытаться уменьшить, как долго мы тратим NPM установить шаги. Мы должны только повторно запустить NPM установить Когда Package.json Изменения файлов. Выборочно запущено это, мы можем значительно уменьшить количество времени для новых стробом Gate/Ci/CD от нескольких минут до менее чем в минуту (зависит от размера вашего проекта).

Фаза 1 – Создание стадии кэша

Наш первый шаг будет создать многоступенчатую Dockerfile Отказ Это позволит нам скопировать в Package.json Файл и запустите только определенный этап, если этот файл изменился.

Фаза 2 – Создать стадию сборки

Следующим шагом будет создать следующий этап, который будет трусить команду NPM Отказ Это делается с использованием Выходная точка Заявление в вашем Dockerfile Отказ Это выполнит данную командную трубу в любых аргументах. Мы используем докерный образ, который имеет Хромиум установлен уже; Это позволит нам запустить Chrome без головы для наших модульных тестов.

Вот полная докерафа:

Фаза 3 – Создание изображения

Теперь, когда у нас есть наш Dockerfile Настройте, давайте построим это. Вам нужно будет сделать это каждый раз, когда файлы меняются, но время, необходимое для копирования ваших новых файлов, является тривиальным, потому что Docker пропустит последующие слои, которые не изменились. Woohoo!

Это взяло около 2 минут. Но это может занять больше времени в зависимости от вашего подключения к Интернету, скорости диска, ЦП и т. Д.

Любая сборка после нашего начального Docker Build займет меньше времени, потому что мы будем только повторно запустить NPM установить Если файл package.json изменился!

Фаза 4 – Создайте код!

Итак, теперь давайте построим наш код внутри имизора тестирования узла. Мы укажем точку монтирования, чтобы мы могли скопировать наш сбор сборки на нее. Это позволит нам извлечь скомпилированный код из докеренной среды! Я использую разветвленный угловой проект в качестве примера, но теперь вы можете использовать это сейчас для любого проекта.

Время сборки заняло около 45 секунд. Но это было составлено наш код, не ждет NPM установить Отказ ДА!

И у нас сейчас есть наши скомпилированные файлы!

Итак, будет только 45 секунд для всех последующих сборки?

Да! Потому что NPM установить Шаг полностью пропущен, потому что Package.json Файл не изменился, вы получите преимущества. Если вы измените Package.json , вы понравится в то же время наказание, которое вы бы имели в любом случае.

Так сколько времени/деньги мы спасли?

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

Время сборки: 3-минутные разработчики: 4 AVG. Check-Ins: 4 почасовая ставка: 30 долларов (ваша почасовая ставка может быть выше)

Время ворот: 16 минут (Ворота ожидания времени х разработчики x avg check-ins) Стоимость ворот: 8 долларов (время ожидания ворот в часах x почасовая ставка) Общее время: 48 минут (построение времени X разработчики X AVG Check-ins ins окружающие) Стоимость: 24 доллара в день (общее время в часах x почасовая ставка)

Итак, давайте посмотрим на это в течение дня, недели и года.

День: $ 24 Неделя: $ 120 Год: $ 6 264

И сколько мы спасены для нашей команды из 4 разработчиков?

Ниже приведен формат ( предыдущая сумма – новая сумма ). И да, это много экономии за год!

День: ($ 144 – $ 24) = $ 120 Неделя: (720 долларов – 120 долларов) = 600 долларов Год: ($ 37 584$ 6,264) = 31 320 долларов

Заключение

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

Если вы хотите играть с этим, пожалуйста, клонируйте мою репозиторий GitHub и веселитесь!

https://github.com/jstandish/cached-node-module-build-example

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

https://www.instagram.com/john.does.code