• Время чтения ~1 мин
  • 10.06.2022

Давайте поговорим об избавлении от 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 каждый раз, когда вы меняете конфигурацию таким образом, чтобы добавлять файлы в реальный файл манифеста.

Когда вам нужно создавать активы?

Иногда вам нужно создавать активы в конвейере непрерывной интеграции! Вот наиболее распространенные случаи, когда вам нужно:

  1. When you build production assets to bundle them up into an “artifact” (zip file, container image, etc) that you can deploy
  2. When you run other node commands as part of your test suite, such as eslint
  3. When you are browser testing with Laravel Dusk

Что делать, если мне нужно создать активы?

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297