来自远程服务器的Git克隆在位桶管道中失败

时间:2019-01-12 22:44:22

标签: ssh bitbucket-pipelines

我正在尝试通过位桶管道将我的应用程序自动部署到数字海洋。这是我的部署遵循的步骤:

  • 使用ssh连接到远程数字海洋小滴
  • 使用ssh运行git clone来克隆我的存储库
  • 使用docker-compose启动我的应用程序

我已经成功设置了对我的遥控器的ssh访问。我还配置了对我的存储库的ssh访问,并且可以从远程服务器成功执行git clone。 但是,在管道中,虽然成功连接到远程服务器,但git clone命令失败,并显示以下错误。

  

git@bitbucket.org:权限被拒绝(公钥)。   致命的:无法从远程存储库读取。

有人知道这里发生了什么吗?

这是我的bitbucket-pipelines.yml

image: atlassian/default-image:latest
pipelines:
  default:
    - step:
      deployment: production
      script:
        - cat deploy.sh | ssh $USER_NAME@$HOST
        - echo "Deploy step finished"

还有部署脚本deploy.sh

#!/usr/bin/env sh
git clone git@bitbucket.org:<username>/<my_repo>.git
cd my_repo
docker-compose up -d

记录git clone ssh命令within the dropletfrom the pipeline

1 个答案:

答案 0 :(得分:0)

Git默认使用默认的ssh密钥。

您可以通过设置GIT_SSH_COMMAND环境变量来覆盖git使用的SSH命令。您可以添加-i参数以使用其他SSH密钥。

export GIT_SSH_COMMAND="ssh -i ~/.ssh/<key>"
git clone git@bitbucket.org:<username>/<my_repo>.git

来自git documentation

  

GIT_SSH

     

GIT_SSH_COMMAND

     

如果设置了这些环境变量之一,则当git fetch和git push需要连接到远程系统时,它们将使用指定的命令而不是ssh。传递给已配置命令的命令行参数由ssh变体确定。有关详细信息,请参见git-config [1]中的ssh.variant选项。

     

$ GIT_SSH_COMMAND优先于$ GIT_SSH,并且由外壳程序解释,从而允许包含其他参数。另一方面,$ GIT_SSH必须只是程序的路径(如果需要其他参数,则可以是包装外壳脚本)。

     

通常,通过您的个人.ssh / config文件配置任何所需的选项更加容易。有关更多详细信息,请查阅ssh文档。