【问题标题】:Git clone from remote server failing in bitbucket pipelines来自远程服务器的 Git 克隆在 bitbucket 管道中失败
【发布时间】:2019-06-07 10:33:38
【问题描述】:

我正在尝试通过 bitbucket 管道将我的应用程序自动部署到数字海洋。以下是我的部署步骤:

  • 使用 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 的日志

【问题讨论】:

  • Droplet 上的git 如何访问 SSH 密钥?尝试通过执行GIT_SSH_COMMAND='ssh -vvv' git clone ... 之类的操作将详细日志记录添加到用于git clone 的ssh,或者如果这不起作用(git 太旧)尝试其他建议之一here 和选项LogLevel DEBUG3。获得输出后,您可以将其放在 pastebin 并在此处提供链接。

标签: ssh bitbucket-pipelines


【解决方案1】:

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,由 shell 解释,允许包含额外的参数。另一方面,$GIT_SSH 必须只是程序的路径(如果需要额外的参数,它可以是一个包装器 shell 脚本)。

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

【讨论】:

    猜你喜欢
    • 2021-02-20
    • 2013-09-16
    • 2016-09-23
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    相关资源
    最近更新 更多