Непрерывная интеграция: где построить проект? - PullRequest
0 голосов
/ 29 октября 2018

У меня есть сервер Jenkins, на котором я наблюдаю частный репозиторий git на предмет изменений, который затем запускает конвейерный сценарий (репозиторий содержит приложение nodejs). В этом конвейерном скрипте мне нужно сделать следующие шаги:

  • Установить зависимости (npm install)
  • Создайте мое приложение (npm run build, которое создает папку dist)
  • Сборка контейнера Docker (docker build) и запуск контейнера (который запускает скрипт в папке dist)

Какой из следующих двух вариантов будет рекомендуемым способом сделать это и почему?

Вариант A: Запустите npm install и npm run build в конвейере jenkins и скопируйте папку dist в контейнер докера во время сборки докера. Это позволило бы мне устанавливать только зависимости времени выполнения в док-контейнере, используя npm install --only=production, что значительно уменьшало размер изображения.

Опция B: Выполнить npm install и npm run build во время сборки докера (в Dockerfile). Это позволило бы мне запускать Docker-контейнер за пределами CI-сервера, если мне нужно (сейчас у меня нет варианта использования, но он выглядит чище, потому что он более независим). Тем не менее, размер изображения значительно увеличится, и я не уверен, что это рекомендуемый способ.

Есть предложения?

1 Ответ

0 голосов
/ 29 октября 2018

Я бы выбрал вариант Б. Причиной этого может быть то, что есть несколько пакетов npm, которые запускают node-gyp, gcc и другие зависимые от платформы сборки. Посмотрите на популярный пакет bcrypt в качестве примера.

Использование опции A будет означать, что ваш докер и машина Jenkins должны поддерживать одну и ту же инфраструктуру для таких сборок, что не является распространенным, если не сказать больше.

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