【发布时间】:2020-08-21 06:24:21
【问题描述】:
我有一个使用特定版本节点的 Node 应用程序,因此我使用 nvm 来触发 .npmrc 文件中的正确版本。
该应用程序是使用 Gitlab 部署的。过程很简单:当我从本地推送到 gitlab repo 时,gitlab 会通过 ssh 连接到生产服务器,并在 Gitlab 中拉取最新版本的 repo
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
如何通过 gitlab-ci.yml 中的 ssh 在example.com 中触发 NVM?
【问题讨论】: