在Google Cloud Build中使用gcloud computing scp时出错

问题描述 投票:1回答:1

我一直在尝试使用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/*./*等,但是它们都不起作用。使用source作为/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将我的代码复制到VM。请帮助。

google-cloud-platform gcloud scp google-cloud-build
1个回答
0
投票

对于'gcr.io/cloud-builders/gcloud'容器映像选项:

星号“ *”由bash解释,并在将引用对象传递给命令之前进行扩展,并且由于此容器映像中的gcloud被直接使用,而不是通过bash作为中介,因此“ * ”不会展开,而是直接传递给gcloud命令,该命令找不到名为“ *”的任何文件。如果您需要复制存储库中的所有代码(递归目录及其文件),请使用相同的命令,但将根符号“ /”(顺便说一下,它是字面值-不可扩展-)写入bash ),而不是“ *”。

对于带有bash的OS容器映像选项:

默认情况下,容器映像必须安装scp才能正常工作,而“ ubuntu”映像默认没有。您可以使用默认情况下安装了openssh-client软件包的映像,也可以将其安装到位,然后运行命令,如下所示(对于步骤语法,请检查this):

steps:
- name: 'ubuntu'
  entrypoint: 'bash'
  args:
  - '-c'
  - |
    sudo apt update && sudo apt install openssh-client -y && scp * username@instance-name:/home/directory
© www.soinside.com 2019 - 2024. All rights reserved.