如何从CircleCI部署到Google Compute Engine?

3
我希望在CI测试之后将CircleCi的构件部署到Google Compute Engine,但我卡在SSH密钥问题上。当运行时,gcloud会要求在CircleCI的部署过程中生成ssh密钥,而我不知道如何处理。

警告:gcloud的公共SSH密钥文件不存在。
警告:gcloud的私有SSH密钥文件不存在。
警告:您没有gcloud的SSH密钥。
警告:将执行SSH keygen来生成密钥。
正在生成公钥/私钥RSA密钥对。
输入口令短语(不输入即为空):

我已经查看了文档这里这里,但是它们都没有提到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
2个回答

4

第一个错误:

输入密码(不输入密码则为空):

  • 您需要添加--quiet标志。

gcloud compute copy-files

此命令确保用户的公共SSH密钥存在于项目的元数据中。如果用户没有公共SSH密钥,则使用ssh-keygen(1)生成一个(如果给出--quiet标志,则生成的密钥将没有密码)。

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

第二个错误:

权限被拒绝(publickey,gssapi-keyex,gssapi-with-mic)

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

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


@choasia如果这个解决方案没有解决你的问题,请毫不犹豫地发表评论。 - Julien Malige
嗨,谢谢你的回答。抱歉我回复晚了,因为我刚结束我的假期。我会尽快尝试你的解决方案。 - choasia
1
太棒了!像魔法一样顺利。非常感谢! - choasia

1
我遇到了同样的问题,在做更多尝试并阅读谷歌云文档后,我意识到我需要生成一个SSH密钥。
我使用CircleCI(这也适用于TravisCI),以下是我添加到circle.yml文件中以生成SSH密钥的命令: - ssh-keygen -q -N "" -f ~/.ssh/google_compute_engine

1
嘿,谢谢你的回答。我尝试了一下,但是在CircleCI运行gcloud compute copy-files ./dist instance-1:/tmp/ --zone $GCLOUD_INSTANCE_ZONE命令时出现了Updating project ssh metadata...-Permission denied (publickey,gssapi-keyex,gssapi-with-mic).的错误提示。你有什么想法吗?或者你遇到过类似的问题吗? - choasia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接