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

手动运行deploy.sh正常,GitHub Actions执行时提示命令未找到

解决GitHub Actions执行部署脚本时pnpm/npm命令找不到的问题

问题原因

通过GitHub Actions的ssh-action连接服务器时,会启动非交互式非登录shell,这种shell不会自动加载用户的~/.bashrc、~/.profile等配置文件,导致pnpm、npm、pm2这类通过nvm或手动安装的工具路径未被加入PATH环境变量,因此脚本执行时找不到对应命令。而手动执行时是交互式shell,会自动加载这些配置,所以能正常运行。

解决方案

方案1:在SSH命令中预加载环境配置

修改GitHub Actions的main.yaml里的script命令,先加载用户的bash配置文件,再执行部署脚本:

script: "source ~/.bashrc && cd ~/gempad-Interface && bash .scripts/deploy.sh"

如果你的服务器默认shell是zsh,就替换为source ~/.zshrc。

方案2:在deploy.sh开头添加环境加载逻辑

直接在部署脚本的开头加入环境变量加载命令,确保后续命令能找到工具路径:

#!/bin/bash
set -e

# 加载用户环境配置,根据实际shell类型选择bashrc或zshrc
source ~/.bashrc

echo "Deployment started..."
# 后续脚本内容保持不变

方案3:使用命令的绝对路径

在服务器上执行以下命令,获取pnpm和pm2的绝对路径:

which pnpm
which pm2

将得到的路径替换deploy.sh里的对应命令,示例如下:

# 替换pnpm install
/home/your-username/.nvm/versions/node/v18.17.0/bin/pnpm install

# 替换pnpm run build
/home/your-username/.nvm/versions/node/v18.17.0/bin/pnpm run build

# 替换pm2 reload
/home/your-username/.nvm/versions/node/v18.17.0/bin/pm2 reload gemlaunch-interface

额外提示

  • 确认GitHub Actions连接服务器的用户和你手动执行脚本的用户一致,避免环境变量不一致的问题。
  • 如果使用nvm管理Node.js版本,也可以在脚本开头加入source ~/.nvm/nvm.sh来加载nvm环境。

内容的提问来源于stack exchange,提问作者Muhammad Anas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 01:03:22