EC2服务器与GitHub Actions中Node.js、npm版本不一致问题咨询
本地SSH与GitHub Actions远程SSH执行Node.js/npm版本不一致问题
问题描述
我在AWS EC2上部署了服务器应用,本地终端SSH登录服务器后,查看的Node.js和npm版本为:
npm : 8.11 node : 17.9.1
但通过GitHub Actions的远程SSH执行命令时,得到的版本却不一样:
cd server npm -v node -v ======END====== out: 3.5.2 out: v8.10.0
我认为两者版本应该一致,但不清楚差异产生的原因,我的理解是否有误?
附上使用的GitHub Actions工作流配置:
jobs: build: runs-on: ubuntu-latest defaults: run: shell: bash working-directory: ./server steps: - name: Cache node modules uses: actions/cache@v2 with: path: ~/.npm key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Use Node.js uses: actions/setup-node@v1 with: node-version: '14.x' - name: executing remote ssh commands using password uses: appleboy/ssh-action@master with: host: ${{ secrets.HOST }} username: 'ubuntu' key: ${{ secrets.SSH_KEY }} script : | cd server pwd npm -v node -v
原因分析
本地SSH和GitHub Actions的远程SSH环境环境变量不同,核心是PATH变量的差异,导致调用的Node.js/npm不是同一个版本:
- 本地登录SSH时,属于交互式登录shell,会自动加载用户的shell配置文件(比如
~/.bashrc、~/.profile),这些文件通常会把你手动安装的Node.js(比如通过nvm、n工具安装的版本)路径加入PATH,所以你看到的是17.9.1/8.11版本。 - GitHub Actions的
appleboy/ssh-action执行远程命令时,默认是非交互式非登录shell,不会加载用户的shell配置文件,此时PATH用的是系统默认值,调用的是EC2系统预装的旧版本Node.js/npm(也就是3.5.2/v8.10.0)。
另外注意:你在GitHub Actions中配置的setup-node@v1是给GitHub的runner环境(ubuntu-latest)设置Node.js版本,和EC2服务器上的环境完全无关,这一步对远程EC2的版本没有任何影响。
解决办法
方法1:加载用户shell配置文件
修改GitHub Actions的ssh脚本部分,先加载用户的配置文件(以bash为例):
script : | source ~/.bashrc cd server pwd npm -v node -v
如果你的EC2用户用的是zsh,就改成source ~/.zshrc。
方法2:直接指定Node.js/npm的完整路径
先在本地SSH登录EC2,执行以下命令获取完整路径:
which node which npm
比如输出可能是/home/ubuntu/.nvm/versions/node/v17.9.1/bin/node和/home/ubuntu/.nvm/versions/node/v17.9.1/bin/npm,然后在脚本中使用完整路径:
script : | cd server /home/ubuntu/.nvm/versions/node/v17.9.1/bin/npm -v /home/ubuntu/.nvm/versions/node/v17.9.1/bin/node -v
方法3:显式设置PATH环境变量
在脚本中直接把你安装的Node.js的bin目录加入PATH:
script : | export PATH="/home/ubuntu/.nvm/versions/node/v17.9.1/bin:$PATH" cd server npm -v node -v
路径需要根据你实际安装的Node.js位置调整。
内容的提问来源于stack exchange,提问作者robin14dev
相关产品推荐
相关产品推荐

