go to index

github action 使用ssh登录rvm环境的问题

read time 2 min read
github action ssh rvm

概述

在远程主机上安装了 RVM 和相关工具(如 Node.js、npm、npx、pm2)后,通过 GitHub Actions 使用 SSH 执行命令时,可能会遇到以下错误提示:

plaintext
npm command not found
npx command not found
pm2 command not found

这些错误通常是因为 SSH 会话没有加载 RVM 环境配置,导致无法找到相应的命令。本文将介绍两种解决方法。

解决办法

方法一:在 GitHub Actions 中加载 RVM 配置

可以在 GitHub Actions 的工作流文件中添加加载 RVM 配置的脚本,以确保 SSH 会话能够正确识别 RVM 管理的环境。

示例代码

yaml
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v3

      - name: SSH and run commands
        uses: appleboy/ssh-action@v0.1.8
        with:
          host: ${{ secrets.SSH_HOST }}
          username: ${{ secrets.SSH_USERNAME }}
          key: ${{ secrets.SSH_KEY }}
          script: |
            export NVM_DIR="$HOME/.nvm"
            [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
            npm --version
            npx --version
            pm2 --version

方法二:在远程主机上创建软链接

如果希望快速解决问题,可以在远程主机上为常用的命令创建软链接,使它们全局可用。不过这种方法缺乏灵活性,也失去了 RVM 的意义,因此只能作为临时解决方案。

示例命令

bash
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/pm2" "/usr/local/bin/pm2"
sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npx" "/usr/local/bin/npx"