【发布时间】:2020-04-14 15:03:57
【问题描述】:
我一直在尝试使用 Google Cloud Build 触发器运行 gcloud compute scp 命令。我希望将我的代码复制到列出的服务器中的相应目录中。
但是,当我在 Cloud Shell 中执行 gcloud compute scp * username@instance-name:/home/directory --zone=us-central1-a --recurse 时,它会起作用,这有点奇怪。
但是当我在cloudbuild.yaml 文件中写入等效项时,它会失败并出现错误:*: No such file or directory。
这是我的cloudbuild.yaml的内容:
- name: 'gcr.io/cloud-builders/gcloud'
args: ['compute' , 'scp' , '*', 'username@instance-name:/home/directory' , '--zone=us-central1-a', '--recurse']
我也尝试过使用remote-builder,但同样失败并出现错误:
ssh: connect to host <ip_address> port 22: Connection timed out
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
我还尝试了其他组合,将源 * 替换为 /workspace/*、./* 等,但它们都不起作用。使用/workspace/ 的源代码执行,但会复制整个workspace 目录,而不是根据需要复制目录的内容。
我也尝试过运行以下设置,但也失败了。
cloudbuild.yaml:
- name: 'ubuntu'
args: ['bash', '-c' , 'scp', '*', 'username@instance-name:/home/directory']
错误:
Already have image: ubuntu
scp: command not found
同样,我只想使用 Cloud Build 将我的代码复制到虚拟机。请帮忙。
【问题讨论】:
-
我怀疑有几件事。首先,您需要向您的虚拟机授予 Cloud Build 的服务帐号权限。其次,Cloud Shell 作为您的个人云凭据进行身份验证,这些凭据可能对虚拟机具有权限。我没有尝试过,但是一旦 Cloud Build 的帐户获得了 VM 的权限,我认为您需要将
scp到root@instance。 -
在这种情况下,将源替换为
/workspace/也不应该奏效。我现在假设当我想复制workspace挂载的内容时,这里出了点问题,通过说明源类似/workspace/* -
嘿Pranay... 你能正常SSH吗(没有云壳);如果不是,您可能需要一种方法来获取这些密钥。请查看此stackoverflow.com/questions/52204216/…
-
嘿 Dharmesh,是的,这行得通。如果我明确命名文件,我可以复制文件,但如果我在源代码中添加
*,则不能。
标签: google-cloud-platform gcloud scp google-cloud-build