如何从 CircleCI 部署到 Google Compute Engine?

How to deploy from CircleCI to Google Compute Engine?

我想在 CI 测试后将 CircleCi 的工件部署到 Google Compute Engine, 但我陷入了 SSH 密钥问题。
gcloud compute copy-files 运行 时,gcloud 会在 CircleCI 的部署过程中要求生成 ssh 密钥,我不知道如何处理。

WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):

我查看了文档 here and here,但其中 none 提到了 SSH 相关主题。那么我应该使用什么 SSH 密钥以及如何将它安全地传递给 gcloud?

[更新] 这是我在部署步骤中的命令。

  - echo $GCLOUD_SERVICE_KEY | base64 --decode --ignore-garbage > ${HOME}/gcloud-service-key.json
  - sudo /opt/google-cloud-sdk/bin/gcloud --quiet components update
  - sudo /opt/google-cloud-sdk/bin/gcloud auth activate-service-account --key-file ${HOME}/gcloud-service-key.json
  - sudo /opt/google-cloud-sdk/bin/gcloud config set project $GCLOUD_PROJECT_ID
  - sudo /opt/google-cloud-sdk/bin/gcloud compute copy-files ./dist instance-1:/tmp/ --zone $GCLOUD_INSTANCE_ZONE

我遇到了同样的问题,在进一步修改和阅读 google cloud docs 后,我意识到我需要生成一个 ssh 密钥。

我使用 CircleCI(这也适用于 TravisCI),这是我添加到 circle.yml 文件中以生成 ssh 密钥的命令: - ssh-keygen -q -N "" -f ~/.ssh/google_compute_engine

第一个错误:

Enter passphrase (empty for no passphrase):

  • 您必须添加 --quiet 标志。

gcloud compute copy-files

This command ensures that the user's public SSH key is present in the project's metadata. If the user does not have a public SSH key, one is generated using ssh-keygen(1) (if the --quiet flag is given, the generated key will have an empty passphrase).

https://cloud.google.com/sdk/gcloud/reference/compute/copy-files

第二个错误:

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

  • 在实例名称前添加一个用户338234243-compute@instance-1:/tmp
  • 删除实例路径的最后/ instance-1:/tmp
  • 检查tmp目录的所有者(您选择的用户应该有R&W权限)

我生成的 ssh 密钥的默认用户似乎是 root,而 GCC sshd 不允许 root 连接...