自建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,步骤如下:
获取Node.js的绝对路径
在服务器上切换到Runner运行的用户(比如runner),执行命令:which node会得到类似
/usr/local/bin/node或/home/runner/.nvm/versions/node/v18.17.0/bin/node的路径,记下来。方法一:直接用绝对路径调用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方法二:将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配置,示例:
但这种方式不如直接调用本地Node高效,毕竟多了加载nvm的步骤。jobs: build: runs-on: self-hosted steps: - name: 加载nvm配置 run: | source ~/.nvm/nvm.sh nvm use default - name: 检查Node版本 run: node -v
内容的提问来源于stack exchange,提问作者Sandeep Kumar
相关产品推荐
相关产品推荐

