Главная » Статьи » Как ускорить непрерывную интеграционную сборку при помощи нового NPM CI и package-lock.json

Как ускорить непрерывную интеграционную сборку при помощи нового NPM CI и package-lock.json

Как ускорить непрерывную интеграционную сборку при помощи нового NPM CI и package-lock.json

От автора: несмотря на всю его противоречивость, новый релиз npm 5.7.0 представил изумительные функции, которые значительно повлияют на процесс разработки!

Из официального журнала изменений… Новая команда npm ci устанавливается ТОЛЬКО из package lock json. Если package.json и lock-файл не синхронизированы, то выдается ошибка. Она работает только выдавая node_modules и восстанавливая его с нуля. Помимо того, что вы гарантированно получите в lock-файле то, что хотели, процесс будет выполнен ещё и намного быстрее (в 2-10 раз!), чем с помощью npm install.

Создайте и используйте package-lock.json файл

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

Нынешнее поведение уже намного больше соответствует ожиданиям разработчиков. При запуске npm install создается файл package-lock.json , если его не существовало с версиями из текущего node_modules . Ручное обновление версий в package.json повлечёт за собой правильное обновление версии в уже существующем package-lock.json при использовании npm install.
С другой стороны, новый npm ci игнорирует package.json (просто выдаёт ошибку, если они не синхронизированы) и устанавливает зависимости, как указано в package-lock.json.

Как активировать более быструю установку в среде Travis CI

Travis CI – это отличный CI сервер с полной интеграцией с публичными репозиториями Github, который очень часто используется в OSS проектах.

Travis CI выполняет несколько действий при каждом запуске сборки. Одним из этих действий является установка, которая выполняет npm install для всех проектов node по умолчанию. К счастью, существует простой способ обойти данную конфигурацию по умолчанию.

Нам нужно добавить секцию install и использовать вместо этого npm ci.

По состоянию на 23. 2. 2018 npm v5.7.1 всё ещё находится на стадии pre-release, поэтому у нас не будет его по умолчанию в среде Travis CI, и нам придётся настраивать его вручную. В будущем можно будет уже не делать этого.
Обновлённый .travis.yml будет выглядеть примерно так…

language: node_js
node_js: - "node"
dist: trusty
install: - npm i -g [email protected] # this should be deleted once 5.7.X is out of "pre-release" - npm ci # instead of default npm install scripts:
# run tests, build, ...

Пример конфигурации .travis.yml Travis CI, для остальных сред CI потребуется другая конфигурация, но, скорее всего, можно будет добиться того же результата

Ускорение сборки

Благодаря этой конфигурации установка зависимостей была выполнена в три раза быстрее, это сэкономило нам более 80 секунд в маленьких и средних проектах Angular CLI.

Как ускорить непрерывную интеграционную сборку при помощи нового NPM CI и package-lock.json

Сравнение установки зависимостей, выполненной с использованием npm install и с npm ci

Добиться в три раза более быстрой установки благодаря небольшим изменениям конфигурации – это невероятно! Точно так же новая локальная установка проверенного проекта теперь занимает ~70 вместо ~170 секунд!

Итоговая сборка выполняется намного быстрее, а зависимости гарантированно устанавливаются упорядоченно в разных средах от локальных механизмов разработки до CI серверов.

Другие CI серверы

Последнее время я использовал в основном Travis CI, но существует и много других отличных CI серверов, например, Jenkins, Teamcity, Bamboo и другие сервера, которые поддерживают широкий спектр гибких конфигураций. В том случае, если вы используете другой CI сервер, просто модифицируйте настройки, отвечающие за подготовку среды Node, чтобы использовать специализированную версию npm (5.7.1 ) и команду npm ci для установки зависимостей.

А как насчёт уведомлений о проблемах с безопасностью?

В изначальном релизе 5.7.0 была очень серьёзная проблема, которая вызвала сильную реакцию, сопровождавшуюся комментариями типа…

По-видимому, он полностью сломал доступ к файловой системе, и мне пришлось вручную настраивать доступ к основным файлам и папкам.

Он уничтожил 3 рабочих сервера после первого развёртывания!

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

Пожалуйста, соблюдайте осторожность и сначала лучше проведите проверку в некритичной среде. Вот и всё! Я надеюсь, эти советы помогут вам ускорить процесс сборки!

Автор: Tomas Trajan

Источник: https://medium.com/

Редакция: Команда webformyself.