You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自建GitHub Actions Runner无法识别已安装的nvm/Node求助

解决GitHub Actions Runner中直接使用服务器本地Node.js的问题

问题原因

GitHub Actions Runner的默认执行环境不会自动加载用户的~/.bashrc或~/.zshrc配置文件,而nvm的环境变量通常是在这些文件里初始化的,所以即使你用root或runner用户装了nvm,Workflow里也找不到nvm命令。

直接使用服务器已安装Node.js的方法

你完全可以跳过nvm,直接调用服务器上已安装的Node.js,步骤如下:

  1. 获取Node.js的绝对路径
    在服务器上切换到Runner运行的用户(比如runner),执行命令:

    which node
    

    会得到类似/usr/local/bin/node或/home/runner/.nvm/versions/node/v18.17.0/bin/node的路径,记下来。

  2. 方法一:直接用绝对路径调用Node
    在Workflow的run步骤里直接写Node的绝对路径,示例:

    jobs:
      build:
        runs-on: self-hosted
        steps:
          - name: 检查Node版本
            run: /usr/local/bin/node -v
          - name: 执行本地脚本
            run: /usr/local/bin/node your-deploy-script.js
    
  3. 方法二:将Node的bin目录加入环境变量PATH
    把Node所在的bin目录(比如/usr/local/bin,即上面路径去掉/node的部分)加入GitHub Actions的环境变量,这样就能直接用node、npm命令,示例:

    jobs:
      build:
        runs-on: self-hosted
        steps:
          - name: 添加Node bin目录到PATH
            run: echo "PATH=/usr/local/bin:$PATH" >> $GITHUB_ENV
          - name: 验证Node和npm
            run: |
              node -v
              npm -v
          - name: 执行脚本
            run: npm run deploy
    

额外提示

  • 确保Runner运行用户对Node.js的安装目录有读和执行权限,如果Node是root用户安装的,需要给runner用户授权,比如:
    sudo chmod -R o+rx /usr/local/bin/node /usr/local/lib/node_modules
    
  • 如果一定要用nvm,也可以在Workflow里手动加载nvm配置,示例:
    jobs:
      build:
        runs-on: self-hosted
        steps:
          - name: 加载nvm配置
            run: |
              source ~/.nvm/nvm.sh
              nvm use default
          - name: 检查Node版本
            run: node -v
    
    但这种方式不如直接调用本地Node高效,毕竟多了加载nvm的步骤。

内容的提问来源于stack exchange,提问作者Sandeep Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 22:45:58