Давайте поговорим об избавлении от NodeJS в конвейерах непрерывной интеграции.
Я запускаю Chipper CI (непрерывная интеграция для Laravel). Меня всегда раздражало, что сборки Webpack занимают больше времени и вызывают больше проблем, чем фактическая ценная часть конвейера непрерывной интеграции.
Большинству из нас нужно просто запустить тесты и, возможно, запустить развертывание.Задачи сборки узлов отнимают много времени и требуют гораздо большего использования ЦП/ОЗУ.
Что, если нам просто не нужен Node в нашем конвейере? Можем ли мы просто... нет?
Ответ: определенно, может быть!
Тесты функций
Очень часто единственной причиной создания статических ресурсов в конвейере непрерывной интеграции является создание файла mix-manifest.json
.
Это позволяет помощнику mix()
работать при запуске тестов Laravel Feature. Тесты функций выполняют вызовы HTTP в ваше приложение и, таким образом, часто отображают блейд-шаблоны, использующие вспомогательную функцию mix()
.
Если у вас нет файла манифеста, выдается ошибка!
Создание этого файла манифеста включает в себя создание ваших статических ресурсов — другими словами, использование npm (или yarn) для установки зависимостей и запуска задач Webpack:
# Build static assets
npm ci --no-audit
npm run dev
Примечание: вы почти наверняка должны зафиксировать свой
package-lock.json
и запуститьnpm ci --no-audit
вместоnpm install
!
Если вы посмотрите на свой файл public/mix-manifest.json
, он, скорее всего, будет выглядеть примерно так (с хешами или без них, в зависимости от того, включено ли управление версиями):
{
"/js/app.js": "/js/app.js",
"/js/foo.js": "/js/foo.js",
"/css/app.css": "/css/app.css"
}
Вот в чем загвоздка: этот файл не обязательно должен существовать для ваших тестов!
В методе setUp()
вашего теста вы можете добавить следующее волшебство:
protected function setUp(): void
{
parent::setUp();
$this->withoutMix();
}
При этом помощник mix()
не будет возвращать никаких ошибок с отсутствующим файлом манифеста. Ваши тесты могут пройти без запуска задач NodeJS!
Вы также можете создать файл манифеста для вашего конвейера непрерывной интеграции, который вы скопируете для тестирования.
Допустим, наша конфигурация Mix создает указанный выше файл mix-manifest.json
. Мы можем зафиксировать фиктивный файл манифеста в tests/mix-manifest.json
, и он всегда будет доступен!
Затем в сценариях конвейера непрерывной интеграции мы можем использовать этот файл вместо установки/создания зависимостей Node:
# What if we created a mix-manifest.json file just for testing?
# During CI, we can just move it where it needs to go
cp tests/mix-manifest.json public/mix-manifest.json
# And then run your tests, no NodeJS required!
php artisan test
С этим файлом помощник mix()
будет работать, и ваши тесты функций будут проходить без проблем!
Этот (или любой другой метод!), который создает правильный файл манифеста, может помочь вам сэкономить МНОГО времени и ресурсов сервера в конвейерах сборки CI.
Вам нужно будет обновлять файл
tests/mix-manifest.json
каждый раз, когда вы меняете конфигурацию таким образом, чтобы добавлять файлы в реальный файл манифеста.
Когда вам нужно создавать активы?
Иногда вам нужно создавать активы в конвейере непрерывной интеграции! Вот наиболее распространенные случаи, когда вам нужно:
- When you build production assets to bundle them up into an “artifact” (zip file, container image, etc) that you can deploy
- When you run other node commands as part of your test suite, such as
eslint
- When you are browser testing with Laravel Dusk