Проблема с передачей данных из контейнера Cloud Build в экземпляр Google Compute Engine - PullRequest
0 голосов
/ 06 сентября 2018

В настоящее время я использую 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 * ​​1012 * в моем экземпляре, но это не помогло мне.
Не могли бы вы, ребята, помочь мне решить эту проблему?
Какие моменты мне нужно проверить / исправить в моем определении сборки?
Может быть, вы можете дать мне совет, какой компоновщик вместо gcloud , который я могу использовать для доставки своих данных из контейнера Cloud Build в экземпляр GCE ?

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Необходимо найти способ создания и определения местоположения файлов ключей SSH , чтобы сборщик мог подключиться к GCE Instance :

  • google_compute
  • google_compute.pub
  • google_compute_known_hosts

Они идентичны тем, которые вы используете для прямого подключения к экземпляру с Cloud Shell или с Локального компьютера , но на этот раз соединение должно быть выполнено Строитель сам.

Создайте эти файлы в интерактивном режиме, как описано в Генерация ключей SSH , к идентификационному пути компоновщика (тестируйте его с помощью cd ~ && pwd, обычно: /builder/home/.ssh).

После установления соединения скопируйте эти файлы в Облачное хранилище Google через gsutil. Этот шаг необходимо выполнить только один раз.

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', чтобы скопировать каталог или ни один, чтобы скопировать только файл.

0 голосов
/ 06 сентября 2018

Несколько вещей, чтобы попробовать:

1.Убедитесь, что вы можете ssh нормально этим способом .

Устранение неполадок SSH в случае сбоя первого шага.

2. Попробуйте изменить цель SSH с «имя_экземпляра» на «имя пользователя @ экземпляр», чтобы указать имя пользователя внутри ВМ, например,

имя пользователя @ InstanceName

...