AWS CodePipeline对接Bitbucket时git push失败 报codestar用户名读取错误
问题产生原因
- CodePipeline通过CodeStar连接拉取Bitbucket源码时,会自动将CodeBuild工作目录内Git仓库的远程
origin地址替换为AWS内部的CodeStar连接代理地址(即报错中https://codestar-connections.eu-east-1.amazonaws.com开头的地址),不会保留原Bitbucket仓库地址。 - 配置中install阶段写入的Git凭证仅对
bitbucket.org域名生效,没有为CodeStar代理域名配置对应凭证。且CodeStar连接的代理地址仅支持CodePipeline服务拉取源码,不开放外部客户端的推送权限,也不存在可供普通Git客户端使用的账号密码凭证。 - 执行打标签脚本的
git push操作时,Git会向当前配置的CodeStar代理地址发起推送请求,找不到对应认证信息就会抛出该错误。
修复方案
核心思路是放弃向CodeStar代理地址推送,在执行推送操作前将远程仓库地址切回Bitbucket的可认证地址,具体操作如下:
- 提前在CodeBuild项目的环境变量中配置两个保密变量,避免明文写在配置文件、避免日志泄露:
GIT_USER:Bitbucket下拥有对应仓库写权限的账号名GIT_PASS:Bitbucket应用专用密码(不要使用账号登录密码,需为该密码开放对应仓库的代码写入、标签推送权限)
- 修改buildspec配置,在执行打标签脚本前,强制替换
origin远程地址为Bitbucket带认证信息的地址,调整后的pre_build段参考如下:
pre_build: commands: - mvn -q -s settings.xml test - git config --global user.email "test@test.com" - git config --global user.name "CI Build Bot" # 替换下方路径为实际Bitbucket仓库地址,输出重定向到空避免密码打印到日志 - git remote set-url origin https://$GIT_USER:$GIT_PASS@bitbucket.org/你的组织名/你的仓库名.git > /dev/null 2>&1 - bash git_tagging.sh
- (可选)如果担心凭证残留在构建环境,可以在打标签脚本执行完成后,将远程地址切回CodeStar默认地址,或直接清理本地Git凭证文件。
注意:不要尝试给codestar-connections域名配置凭证,该地址为AWS内部服务代理,不支持用户侧直接推送代码,配置任何凭证都无法正常完成push操作。
内容的提问来源于stack exchange,提问作者GLN
相关产品推荐
相关产品推荐

