GitLab提交代码后pipeline报错无法读取用户名,Laravel Deployer部署cPanel失败
问题解决方案
报错根因
报错核心是cPanel服务器执行GitLab私有项目克隆时,使用HTTPS协议未提供有效身份验证凭据,导致身份校验失败返回128退出码。
修复步骤
方法1:切换为SSH协议拉取代码(推荐)
- 登录cPanel服务器,切换到部署用户
sfd,执行命令生成SSH密钥:
全程回车不设置密码,生成后复制ssh-keygen -t ed25519 -C "cpanel-deploy-key"~/.ssh/id_ed25519.pub文件的全部内容。 - 打开GitLab对应项目,依次进入「设置」-「仓库」-「部署密钥」,粘贴刚才复制的公钥,按需勾选推送权限后保存。
- 修改
deploy.php中的仓库地址为SSH格式:'repository' => 'git@gitlab.com:n1063/suntop/nas-project.git',
方法2:HTTPS地址绑定访问令牌
- 登录GitLab账号,进入「个人设置」-「访问令牌」,创建一个勾选
read_repository权限的个人访问令牌,生成后复制保存令牌值。 - 修改
deploy.php中的仓库地址为带认证的HTTPS格式,建议通过环境变量读取敏感信息避免明文泄露:
对应将// 直接填写(不推荐,会泄露凭据) 'repository' => 'https://<你的GitLab用户名>:<生成的访问令牌>@gitlab.com/n1063/suntop/nas-project.git', // 推荐通过CI变量配置 'repository' => env('DEPLOY_REPO_URL'),DEPLOY_REPO_URL变量添加到GitLab项目的CI/CD变量中即可。
方法3:使用upload策略跳过服务器克隆(适配CI场景)
你当前gitlab-ci.yml的deploy步骤已经配置了-s upload参数,该策略会直接将CI环境中已经构建好的代码(含vendor、node_modules等依赖)上传到服务器,不需要服务器端执行git clone操作。
- 确认你的Laravel Deployer版本支持upload策略
- 检查
deploy.php中没有强制配置git clone相关的部署策略,配置正确后即可自动跳过服务器克隆步骤,直接规避身份验证问题。
额外配置修正
你当前的GitLab Runner配置存在错误,[[runners]]下的url字段应该填写GitLab实例地址https://gitlab.com/,而非你的项目地址,否则Runner无法正常连接GitLab获取任务:
[[runners]] name = "DESKTOP-1OOOT34" url = "https://gitlab.com/" token = "mytoken" executor = "shell" shell = "powershell" # 其余配置保持不变
内容的提问来源于stack exchange,提问作者Faisal Faiz Michankhel
相关产品推荐
相关产品推荐

