Почему мой gitlab-ci.yml продолжает сбой при запуске теста npm, пока он работает в редакторе кода?

# #node.js #mongodb #gitlab #mocha.js #pipeline

Вопрос:

Я написал тесты для своего кода, и все они проходят. Я использую nodejs для создания REST api. Я решил записать все в репозиторий gitlab. Все это сработало. Затем я добавил файл gitlab-ci.yml в свой проект. В настоящее время это выглядит так:

 stages:  - testing  Testing:  stage: testing  image: node:latest  services:  - mongo:latest  before_script:  - npm install --no-optional  script:  - npm run test  

Я довольно новичок в трубопроводах, и я не уверен, что в этом не так. Я использую MongoDB для своей базы данных, и моя строка подключения находится в файле .env. Тесты написаны с использованием мокко и чая. Когда я совершаю фиксацию, конвейер выходит из строя. Я получаю ошибку:

 ERROR: Job failed: exit code 1  

Когда я смотрю дальше в ошибке, она говорит:

 Error: Cannot find module '../controllers/UserController'  

Это странно, потому что я не получаю эту ошибку в редакторе моего кода (Визуальный код), а контроллер управления файлами находится в папке контроллеры. Я чувствую, что в gitlab-ci.yml чего-то не хватает, но я не могу понять, что это такое. Любые намеки будут оценены по достоинству.

Ответ №1:

Я использую MongoDB для своей базы данных, и моя строка подключения находится в файле .env.

Если ваше приложение настроено динамически, это может быть проблемой (я предполагаю , что вы не передаете секреты управлению версиями), обязательно перейдите к своему Project -gt; Settings -gt; CI/CD -gt; Variables , нажмите Add Variables и поместите в него содержимое своего .env файла, обязательно выберите File в качестве типа.

Настройка переменной

Gitlab не разрешает использовать имя .env в качестве допустимого имени, поэтому обязательно используйте какое-либо другое значение, например ENV .

 stages:  - testing  Testing:  stage: testing  image: node:latest  services:  - mongo:latest  before_script:  # ENV is exported as a path to your "ENV" file,   # this is copying it to a local '.env' file  - cp $ENV .env  # If you need it, this is a way to export the  # environment variables inside your file  - source .env; export $(cut -d= -f1 .env);  # Debugging the pipelines  - ls -lah  # Your old commands  - npm install --no-optional  script:  - npm run test  

Вы можете добавить дополнительные «отладочные» before_script scripts скрипты в разделы или (например ls , один), это поможет вам в конечном итоге понять, что происходит не так в ваших конвейерах.

Примечание: Если вы не хотите добавлять весь файл в CI, вы можете добавить строку подключения отдельно в качестве Variable типов.

Ответ №2:

другая вещь, которая может произойти, заключается в том, что вы запускаете другой узел и npm в gitlab, а затем локально. Я бы убедился, что они синхронизированы, и GitLab не обновляется случайным образом — т. Е. Я бы установил node:16 или какую бы версию вы ни выбрали, она работает нормально.