Gitlab自动部署时git pull提示已更新且无法运行composer命令问题
结论
- SSH连接本身正常:从运行日志可见SSH私钥添加成功,远程服务器的
git pull命令已成功返回结果,说明SSH认证、链路连接均无异常。
故障原因
你的脚本逻辑存在错误:
ssh -p 28785 test@test "git checkout development && git pull"仅将引号内的两条命令在远程服务器执行,SSH会话执行完命令后自动退出,后续cd server、composer i等所有命令均在GitLab CI Runner的本地容器中执行,而非目标远程服务器,自然找不到对应项目目录,无法正常运行后续操作。- 从运行日志的SSH命令输出行可以看到命令被截断,也可验证SSH仅执行了单独的连接、后续命令未在远程运行的问题。
修复方案
将所有需要在远程服务器执行的命令全部整合到同一条SSH调用中,参考写法如下:
deploy_staging: type: deploy environment: name: staging url: test.ro script: - ssh -p 28785 test@test << 'EOF' # 替换为你服务器上项目的实际绝对路径,避免登录后默认目录错误 cd /www/your/project/path git checkout development git pull cd server composer i composer optimize php artisan migrate cd ../client npm i npm run dev EOF only: - development
额外注意事项:
- 提前确认
SSH_PRIVATE_KEY对应的公钥已添加到目标服务器test用户的~/.ssh/authorized_keys文件中 - 确认服务器上项目目录的权限属于test用户,避免权限不足导致命令执行失败
内容的提问来源于stack exchange,提问作者KoulJak
相关产品推荐
相关产品推荐

