Ниже приведен конвейер, который мы используем для развертывания приложения на сервере Debian.
stages:
- deploy
deploy-job: # This job runs in the deploy stage.
stage: deploy # It only runs when *both* jobs in the test stage complete successfully.
environment: production
image: node:latest
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir ~/.ssh
- chmod 700 ~/.ssh
- echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- echo "Deploying application..."
- ssh $SSH_USER@$SSH_IP "cd $PROEJCT_PATH/$PROJECT_DIRECTORY_NAME && serve -s build"
- echo "Application successfully deployed."
Но это выдает следующее сообщение об ошибке:
файл:///usr/local/lib/node_modules/serve/build/main.js:169
const ipAddress = request.socket.remoteAddress?.replace("::ffff:", "") ?? "неизвестный"; ^ SyntaxError: Неожиданный токен '.' в Loader.moduleStrategy (internal/modules/esm/translators.js:133:18) по асинхронной ссылке (внутренние/модули/esm/module_job.js:42:21)
У нас была такая же проблема после установки узла на сервер Debian, но после его обновления с помощью nvm install 19.4.0
это устранило проблему.
Тогда команда serve -s build
работала на сервере, но не работает в пайплайне.
Мы обсуждаем возможность того, что контейнер использует свою собственную среду, но мы не уверены в этом предположении.
Может кто поможет и объяснит проблему.
Ошибка возникает из-за «новой» optional chaining
функции javascript ?.
, которая поддерживается начиная с версии 14. Однако версия узла Debian 11 по умолчанию — v12. Таким образом, вы должны обновить узел до последней версии.
sudo apt remove node npm nodejs
#удалить старый узел/npmsudo snap install node --classic
#см. https://snapcraft.io/node
или используйте вместо этого nvm
, как вы сделали; для установки конкретной версии узла