1

我们目前在 Google Container Engine 上托管我们的 Ruby on Rails 站点。我正在将我们的部署从第 3 方 CI 迁移到新的 Google Container Builder。唯一阻止我的是从私人 Github 存储库安装我们的 gem。我已经创建了一个存储在云存储中的 SSH 密钥,我使用该gsutil命令加载了该密钥。我已经确保密钥在那里并且具有正确的文件权限(使用简单的busyboxls构建步骤)但是我不知道如何让Bundler/git稍后使用它。我已经尝试了一些使用此答案中的环境变量(例如GIT_SSH_COMMAND)的解决方案,但没有成功。

我通过添加 SSH 密钥在我们当前的 CI 上工作,ssh-add以便git稍后可以找到它。但是,基本 Google 映像似乎没有使用 ssh-agent。

有什么建议(或技巧 :) 来解决这个问题吗?

4

3 回答 3

4

我会为你列出两个选项。

1) 由于您在云存储中获得了 ssh 密钥,因此您可以使用gsutil cloud-builder将其从那里拉到您的构建上下文中。自述文件包含将文件从 GCS 复制到构建工作区的示例。

请注意,您可能必须设置 Builder 服务帐户才能对包含凭据的 GCS 对象具有读取权限。

一旦您在工作区中获得了凭据,您应该能够对它们做您想做的事情。

2) 如果您将 GitHub 存储库连接到 Cloud Source Repository,那么您可以直接从那里提取源代码,假设您的 Builder 服务帐户可以访问 CSR。(如果它在同一个项目中,默认情况下它将具有读取权限。)

全面披露:我是 Container Builder 背后工程团队的 Google 员工。

于 2017-03-22T23:08:47.167 回答
3

好的,在得到谷歌团队的帮助和反复试验后,我发现以下策略有效。

在我的cloudbuild.yaml我添加了以下构建步骤:

- name: ruby:2.2 args: ['bash', './devops/cloud_bundle_install.sh']

以下内容在哪里./devops/cloud_bundle_install.sh

eval `ssh-agent` mkdir -p /root/.ssh ssh-keyscan github.com >> ~/.ssh/known_hosts mv /workspace/<KEY_DOWNLOADED_VIA_GSUTIL> ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-add /workspace/.ssh/id_rsa bundle package --all --all-platforms

于 2017-03-24T14:48:46.993 回答
0

更简单的版本:

cloudbuild.yaml:

  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    args: ['gsutil', 'cp', '-r', 'gs://artifacts.<PROJECT-ID>.appspot.com/.ssh', '/builder/home/']
  - name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
    entrypoint: /bin/bash
    args: ['-c', 'chmod 400 /builder/home/.ssh/build']
  - name: 'gcr.io/cloud-builders/gcloud'
    args: [ 'beta', 'compute', 'ssh', '--zone=<ZONE>', 'build@<INSTANCE-ID>', '--ssh-key-file=/builder/home/.ssh/build', '--', 'ls -al' 
于 2020-06-11T10:05:52.083 回答