# #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
или какую бы версию вы ни выбрали, она работает нормально.