node.js - CircleCI忘记机器执行器上的节点版本
问题描述
我将节点版本设置为10.15.1
withnvm
并在下一步中run
恢复为6.1.0
. 我尝试了几种变体,包括这个:https ://www.cloudesire.com/how-to-upgrade-node-on-circleci-machine-executor/
我错过了一些明显的东西吗?我只需要每run
一步都记住我在第一步中设置的节点版本,以便10.15.1
在这种情况下它们都将使用。
这是我工作流程中的工作:
dev:
environment:
BASH_ENV: run/env/test/.env
machine:
image: circleci/classic:latest
steps:
- checkout
- run:
name: Install node@10
command: |
set +e
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
export NVM_DIR="/opt/circleci/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 10
nvm alias default 10
rm -rf ~./node-gyp
node -v # prints 10.15.1 as expected
- run:
name: Install yarn and rsync
command: |
node -v # prints 6.1.0
export NVM_DIR="/opt/circleci/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
node -v # prints 6.1.0
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt-get update && sudo apt-get install yarn rsync
- run:
name: Install node modules
command: |
node -v # prints 6.1.0
yarn install # this is what is failing because of the unexpected node version
- run:
name: Deploy to Dev Server
command: |
if [ "${CIRCLE_BRANCH}" == "master" ]; then rsync -arhvz --exclude .git/ -e "ssh -o StrictHostKeyChecking=no" --progress \
./ ubuntu@xxx.xxx.xxx.xxx:/var/www/xxx/xxx/; fi
if [ "${CIRCLE_BRANCH}" == "master" ]; then ssh -o StrictHostKeyChecking=no ubuntu@xxx.xxx.xxx.xxx 'cd /var/www/xxx/xxx && pm2 restart all --update-env'; fi
解决方案
尽管 FelicianoTech 是正确的,但在您预先安装了 nvm 的机器执行程序中,它不会记住下一个运行命令中的实际状态。为了让 nvm 记住它的状态,你必须将它存储在$BASH_ENV
. 经过数小时的搜索,我终于在 CircleCI Disussion Board 中找到了答案:
machine:
image: circleci/classic:latest
steps:
- checkout
- run:
command: |
echo 'export NVM_DIR="/opt/circleci/.nvm"' >> $BASH_ENV
echo ' [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> $BASH_ENV
- run: nvm install 10
- run: node -v
- run: npm -v
- run: npm i -g npm@6.9.0
- run: npm -v
- run: nvm alias default 10
- run: nvm use 10
- run: node -v
- run: npm -v
然后,只有那时,我也取得了成功,即使最后一个运行命令- run: node -v
仍然正确地记住节点版本。
CircleCI 上的输出
(在讨论板上向 phil-lgr 致谢)
推荐阅读
- excel - 如何隐藏行中没有数据的行
- php - 修复预期的数组但得到了对象?
- python - 无法使用 bs4 从 BSE 网站上抓取特定信息
- c# - 服务器上的缩略图 - GDI+ 中出现一般错误
- python - 使用 Python mysql.connector 将包含表情符号的 unicode API 响应插入 Mysql
- postgresql - Postgres:使用 PGAdmin 将数据库从一台服务器复制到 AWS RDS 上的另一台服务器
- java - ArrayList 不会存储来自用户输入的实例
- path - 如何使用伪代码描述 2 个节点之间的可能路由
- c++ - 如何获取支持枚举的类型
- php - 如何为每个 php 线程获取唯一的 php-extension 实例?