CircleCI 无法访问私有存储库

CircleCI failing to access private repository

我们有一个 Flutter 应用程序,它使用私有存储库作为依赖项。

SSH 密钥已添加到 CircleCI,并且使用相同的密钥远程访问存储库在本地工作得很好。

配置已添加到 .circleci/config.yml:

- add_ssh_keys:
  fingerprints:
    - "84:1a:so:me:ke:y:14:31:0f"

但 CircleCI 始终无法访问私有依赖库,并出现以下错误:

" Running "flutter pub get" in project... Git error. Command: git clone --mirror git@bitbucket.org:our_account/priv_repo.git /home/circleci/development/flutter/.pub-cache/git/cache/priv_repo-3456accd54b38ec5b3820944f77e90ce2ddc9887 stdout: stderr: Cloning into bare repository '/home/circleci/development/flutter/.pub-cache/git/cache/priv_repo-3456accd54b38ec5b3820944f77e90ce2ddc9887'... Warning: Permanently added the RSA host key for IP address '18.205.93.1' to the list of known hosts. Unauthorized fatal: Could not read from remote repository.

Please make sure you have the correct access rights and the repository exists. exit code: 128 "

有没有人成功创建了一个包含私有 repo 依赖的 CircleCI 部署?
可能缺少什么导致此问题?

好的 - 有几处我错了,

最主要的是我把 add_ssh_keys 行放错了地方。
它确实 需要成为第一步 ,或者至少在 flutter/install_sdk_and_pub 步骤之前。

例如。 这有效(但如果 add_ssh_keys 步骤位于此处 4 个步骤列表的底部,则失败):

    steps:

      - add_ssh_keys:
          fingerprints:
            - "84:1a:so:me:ke:y:14:31:0f"

      - checkout
      - aws-cli/setup:
          profile-name: example
      - flutter/install_sdk_and_pub:
          flutter_version: 2.5.3

除此之外,值得注意的是,我将 SSH 密钥添加为“其他 SSH 密钥”类型的密钥(添加“用户密钥”破坏了部署)(在“项目设置”>“SSH 密钥”下),
我将密钥的 Hostname 设置为“bitbucket.org”。

所以 CircleCI 现在成功地引入了我的私有 repo 依赖。
它在版本控制不匹配的问题上失败,但这是另一个问题,将在另一个时间解决。

我想先澄清一些事情。

The main one was that I had the add_ssh_keys line in the wrong place. It really needs to be the first step, or at least be before the flutter/install_sdk_and_pub step.

是的,这是因为每个步骤 运行 都在不同的会话中,所以它们不会共享彼此的配置。您的 ssh-key 之所以有效,是因为在 Project Settings 上定义的环境变量用于所有步骤。

eg. This works (but if the add_ssh_keys step was at the bottom of the list of 4 steps here then it fails):

是的,如果你想在另一个步骤中使用这个fingerprint,你也需要将它粘贴到那里。

您可以采取一些措施来解决您的问题,您可以将主 ssh-key 保留在 Project Settings 上,您可以使用 public 键创建一个环境变量内容(来自另一个ssh-key)。

之后,在使用第二个键之前,您需要 运行 一些命令,例如:

  - run:
      name: Step I'm using the second key
      command: |
        echo -e $MY_ENV_VAR | base64 -d > key
        chmod 400 key
        eval $(ssh-agent -s)
        ssh-add key
        git clone...
        docker build...

这样做,您将能够克隆第二个存储库。