如何在Bitbucket Pipelines中向私有仓库提交并推送代码?
这个问题我之前帮人排查过,核心原因是Bitbucket Pipelines在执行git push时,用HTTPS方式需要验证身份,但Pipelines是无交互环境,没法弹出输入密码的窗口,所以才会报这个错误。下面给你两种最实用的解决办法,从简单到进阶:
方案一:用Bitbucket App Password(最简单的密码方式)
这是最快能解决问题的方法,不需要折腾密钥,用Bitbucket专门提供的App Password来替代你的账号密码:
- 第一步:生成App Password
登录你的Bitbucket账号,进入个人设置 → App passwords → 点击Create app password。给这个密码起个名字(比如Pipelines Push),然后勾选需要的权限:至少要选Repository下的Write权限,其他权限按需勾选,最后点击Create,复制生成的密码(一定要保存好,离开页面就看不到了)。 - 第二步:在Pipelines里配置环境变量
进入你的仓库 → Settings → Pipelines → Repository variables,添加一个新变量,比如BITBUCKET_APP_PASSWORD,把刚才复制的App Password粘贴进去,记得勾选Secured(这样密码不会明文显示)。 - 第三步:修改你的Pipeline脚本
把原来的git remote set-url那一行改成:
这样Pipelines执行push时,就会自动用这个App Password完成身份验证,不会再卡住要密码了。git remote set-url origin https://myname:$BITBUCKET_APP_PASSWORD@bitbucket.org/company/repo.git
方案二:用SSH密钥(免密更安全)
如果不想用密码方式,SSH密钥是更安全的免密方案,步骤稍微多一点,但一劳永逸:
- 第一步:生成无密码的SSH密钥对
在你的本地终端执行命令(不要设置密码,直接回车到底):
执行完后,会在ssh-keygen -t ed25519 -C "myname@company.com"~/.ssh目录下生成两个文件:id_ed25519(私钥)和id_ed25519.pub(公钥)。 - 第二步:把公钥添加到Bitbucket仓库
打开id_ed25519.pub文件,复制里面的全部内容。然后进入你的Bitbucket仓库 → Settings → SSH keys → 点击Add key,粘贴公钥内容,起个名字(比如Pipelines Key),保存即可。 - 第三步:在Pipelines里配置私钥
进入仓库的Settings → Pipelines → Repository variables,添加一个新变量SSH_PRIVATE_KEY,把id_ed25519文件里的全部内容粘贴进去,勾选Secured。 - 第四步:修改Pipeline脚本
在脚本的最开头添加配置SSH的步骤,然后修改remote URL为SSH格式:
后面的# 配置SSH密钥 mkdir -p ~/.ssh echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_ed25519 chmod 600 ~/.ssh/id_ed25519 # 添加Bitbucket到已知主机,避免首次连接的确认提示 ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts # 替换remote URL为SSH格式 git remote set-url origin git@bitbucket.org:company/repo.gitgit add、commit、push步骤保持不变就行,现在push就会用SSH密钥自动验证,不需要密码了。
额外注意事项
- 你的脚本里已经加了
[skip CI]在commit信息里,这点很重要,能避免Pipelines因为这次push再次触发,造成循环执行。 - 不管用哪种方式,都不要把密码或密钥硬编码在脚本里,一定要用Pipelines的环境变量,保证安全。
内容的提问来源于stack exchange,提问作者Ludo
相关产品推荐
相关产品推荐

