У меня есть приложение Node, которое использует указанную c версию узла, поэтому я использую nvm для запуска правильной версии в файле .npmrc
.
Приложение развертывается с помощью Gitlab. Процесс прост: когда я sh с локального репозитория на gitlab, gitlab подключается к производственному серверу через s sh и извлекает последнюю версию репозитория в Gitlab
image: node:latest
before_script:
- apt-get update -qq
- apt-get install -qq git
- 'which ssh-agent || ( apt-get install -qq openssh-client )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$K8S_SECRET_SSH_PRIVATE_KEY" | base64 -d)
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
stages:
- deploy_production
deploy_production:
stage: deploy_production
only:
- master
script:
- ssh myuser@example.com 'export NPM_TOKEN=${NPM_TOKEN} && cd www/myproject && rm -rf node_modules dist/* && git pull && export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" --no-use && eval "[ -f .nvmrc ] && nvm install || nvm install stable" && nvm use --delete-prefix && npm ci && npm run prod'
- ssh myuser@example.com "cd www/myproject && nvm use --delete-prefix"
Проблема находится в последнем скрипте. Я получаю такой ответ:
Webpack Bundle Analyzer saved report to /usr/home/myuser/www/myproject/dist/client-report.html
$ ssh myuser@example.com "cd www/myproject && nvm use --delete-prefix"
bash: nvm: command not found
ERROR: Job failed: exit code 1
Если я захожу прямо с локального терминала на сервер развертывания и запрашиваю переменную NVM_DIR, я могу получить его, как и ожидалось:
ssh myuser@example.com
cd www/myproject
echo $NVM_DIR
$~/home/myuser/.nvm
Но если Я добавляю скрипт в свой gitlab-ci.yml с тем же действием:
image: node:latest
before_script:
- apt-get update -qq
- apt-get install -qq git
- 'which ssh-agent || ( apt-get install -qq openssh-client )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$K8S_SECRET_SSH_PRIVATE_KEY" | base64 -d)
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
stages:
- deploy_production
deploy_production:
stage: deploy_production
only:
- master
script:
- ssh myuser@example.com 'export NPM_TOKEN=${NPM_TOKEN} && cd www/myproject && rm -rf node_modules dist/* && git pull && export NVM_DIR="$HOME/.nvm" && . "$NVM_DIR/nvm.sh" --no-use && eval "[ -f .nvmrc ] && nvm install || nvm install stable" && nvm use --delete-prefix && npm ci && npm run prod'
- ssh myuser@example.com "cd www/myproject && echo $NVM_DIR"
- ssh myuser@example.com "cd www/myproject && nvm use --delete-prefix"
Результат пуст
[…]
Webpack Bundle Analyzer saved report to /usr/home/myuser/www/myproject/dist/client-report.html
$ ssh myuser@example.com "cd www/myproject && echo $NVM_DIR"
$ ssh myuser@example.com "cd www/myproject && nvm use --delete-prefix"
bash: nvm: command not found
ERROR: Job failed: exit code 1
Что я могу сделать, чтобы запустить NVM в example.com
через s sh в gitlab-ci.yml?