1

目前我正在使用Cloud Build来生成一些我需要部署到 GCE 实例的工件。为此,我尝试使用带有以下参数的gcloud builder:

- name: 'gcr.io/cloud-builders/gcloud' 
  args: ['compute', 'scp', '--zone=<zone_id>', '<local_path>', '<google compute engine instance name>:<instance_path>']

并且构建失败并出现以下错误:

ERROR: (gcloud.compute.scp) Could not SSH into the instance.  It is 
possible that your SSH key has not propagated to the instance yet. Try 
running this command again.  If you still cannot connect, verify that 
the firewall and instance are set to accept ssh traffic.

我已经在我的实例上打开了端口22,但这对我没有帮助。
你们能帮我解决这个问题吗?
我需要在构建定义中检查/修复哪些要点?
也许你能给我一个建议,我可以使用哪个构建器而不是gcloud将我的数据从Cloud Build容器传递到GCE实例?

4

2 回答 2

1

有几件事要尝试:

1.确保你可以通过这种方式正常ssh 。

如果第一步失败,则对 SSH 进行故障排除。

2.尝试将SSH目标从'instancename'更改为'username@instance',以指示VM内的用户名,例如

用户名@InstanceName

于 2018-09-06T15:07:05.513 回答
0

您必须找到一种方法来生成和定位SSH 密钥文件,以便构建器连接到GCE 实例

  • google_compute
  • google_compute.pub
  • google_compute_known_hosts

它们与您用于从Cloud Shell本地计算机直接连接到实例的那些相同,但这次连接必须由构建器自己完成。

像SSH 密钥生成中解释的那样以交互方式将该文件创建到构建器的身份路径(通过 测试它cd ~ && pwd,通常是:)/builder/home/.ssh

建立连接后,通过 将这些文件复制到Google Cloud Storagegsutil。此步骤只需执行一次。

steps:

- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', '-rP', '${_BUIKDER_HOME}', 'gs://${_BUCKET_NAME}/builder/']

substitutions:
  _BUCKET_NAME: <bucket_name>
  _BUIKDER_HOME: <builder_home>

timeout: "60s"

您可以将这些关键文件带到您的工作区。如果您喜欢它,那么它们将需要留在存储中。

此放置的目的是它们将用于重新连接到实例,因为每次启动构建器时,它将被配置回默认阶段,因此文件将不再存在。

准备好密钥文件后,您可以执行scp transfer以下操作:

steps:

- name: 'gcr.io/cloud-builders/gsutil'
  args: ['cp', '-rP',  'gs://${_BUCKET_NAME}/builder/.ssh'], '_${_BUILDER_HOME}']

- name: 'gcr.io/cloud-builders/gcloud' 
  args: ['compute', 'scp', '--recurse', '--zone', '${_ZONE}', '${_LOCAL_PATH}', '${_USER_NAME}@${_INSTANCE_NAME}:${INSTANCE_PATH}']

substitutions:
  _ZONE: <zone>
  _USER_NAME: <user_name>
  _LOCAL_PATH: <local_path>
  _BUCKET_NAME: <bucket_name>
  _BUILDER_HOME: : <builder_home>
  _INSTANCE_NAME: <instance_name>
  _INSTANCE_PATH: <instance_path>

timeout: "60s"

注意:使用'--recurse'标志来复制目录或使用none来仅复制文件。

于 2019-05-19T04:23:23.680 回答