Laravel 5.7中使用Envoy通过HTTPS访问Bitbucket仓库可行吗?
解决Laravel Envoy通过HTTPS克隆Bitbucket仓库的问题
你的核心问题出在Envoy任务的命令拼接逻辑上,我来帮你一步步梳理解决:
错误根源分析
你在@setup段里把$repo定义成了完整的git clone命令,然后在@task里又重复写了git clone,导致最终服务器执行的命令变成了:
git clone "" "git clone https://myaccount@bitbucket.org/myaccount/votes.git 20190309072721"
Git会把整个git clone https://...字符串当成仓库地址,自然会报错说无法识别git clone https这个奇怪的协议。
正确的Envoy配置示例
把仓库地址和Git命令拆分,只在@setup里定义纯仓库URL,然后在task里构建正确的克隆命令:
@setup $server_login_user = 'deployer_user'; $repo = 'https://myaccount@bitbucket.org/myaccount/votes.git'; // 仅保留仓库URL,不要加git clone $branch = 'main'; // 替换为你需要部署的分支,比如master/main $release_number = date('YmdHis'); // 自动生成唯一的发布目录名 @endsetup @servers(['production' => $server_login_user.'@NNN.NN.NN.NN']) @task('deploy', ['on' => 'production']) # 先创建发布目录(如果目录不存在的话) mkdir -p /var/www/html/project_name/release/{{ $release_number }} # 执行标准的Git克隆命令 git clone -b {{ $branch }} "{{ $repo }}" "/var/www/html/project_name/release/{{ $release_number }}" @endtask
额外关键注意事项
- Bitbucket HTTPS认证问题:如果你的Bitbucket账号开启了两步验证(2FA),直接用账号密码克隆会失败,需要在Bitbucket账号后台创建一个App Password,然后用这个密码替换URL里的账号密码,格式为:
https://你的用户名:你的App密码@bitbucket.org/client/project_name.git - 避免手动输入密码:为了让Envoy执行时不用手动输入密码,可以在部署服务器上配置Git凭证存储:
git config --global credential.helper store,或者把凭证直接写在URL里(注意:不要把带密码的URL提交到版本控制)。 - 分支可选处理:如果不需要指定分支,直接去掉命令里的
-b {{ $branch }}部分,Git会默认克隆仓库的默认分支。
调整后执行envoy run deploy,应该就能正常通过HTTPS克隆Bitbucket仓库了。
内容的提问来源于stack exchange,提问作者Petro Gromovo
相关产品推荐
相关产品推荐

