如何从 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 连接...
我想在 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 连接...