Cloud Build 上传工件失败
Cloud Build fails to upload artifact
我有一个 Cloud Build,在最后一个容器之后,我尝试上传工件。
我的 yaml 结尾为:
- name: eu.gcr.io/foo/bar
args: ["arg1"]
artifacts:
objects:
location: "gs://foo-bar/go/"
paths: ["/output/*"]
我的期望是,与 CloudBuild 示例类似,它将获取最后一个 Container 的 /output
目录并将其所有文件上传到 foo-bar/go
。保留通配符很重要,因为我事先不知道哪些文件将在 /output
.
中
相反,我收到错误消息:
ERROR: could not upload /output/* to gs://foo-bar/go/; err = exit status 1
ERROR
CommandException: 1 file/object could not be transferred.
CommandException: No URLs matched: /output/*
/output/*: Uploading path....
Artifacts will be uploaded to gs://foo-bar using gsutil cp
有人知道如何进行这项工作吗?
我会说正确的方法是确定“/输出”文件夹中的内容,因此在尝试存储数据之前,您可以尝试先列出文件夹,再列出工件。或者也可以使用“查找”命令查找输出文件夹。您可以将此 doc 用作指南,其中使用“bash”
作为入口点执行脚本
通过使用 volume 的显式 gsutil 调用使其工作。
在这一点上,我可以假设文档中的某些示例实际上不起作用。不过,这对我有用:
- name: eu.gcr.io/foo/bar
args: ["arg1"]
volumes:
- name: data
path: /output
- name: gcr.io/cloud-builders/gsutil
args: ["cp", "/output/*", "gs://foo-bar/go/"]
volumes:
- name: data
path: /output
不如 artifacts
灵活,但至少它完成了工作。
晚了 2 年,但我找到了这个问题的答案。
我在遇到问题时遇到了这个问题。试图在桶上获取工件导致 No URLs matched
。
问题是如果没有您创建的卷,输出文件夹将无法保留。默认情况下,Cloud Build 会在步骤之间保留一个文件夹,即 /workspace
文件夹。如果您将 eu.gcr.io/foo/bar
容器设置为输出到 /workspace
文件夹,则以下内容将存储工件。
- name: eu.gcr.io/foo/bar
args: ["arg1"]
artifacts:
objects:
location: "gs://foo-bar/go/"
paths: ["/output/*"]
在 yaml 中,还有选项 dir
可让您设置工作目录。还有更多信息 here。我没有深入研究这个问题,但可能会提供一个更简单的解决方案。
我有一个 Cloud Build,在最后一个容器之后,我尝试上传工件。
我的 yaml 结尾为:
- name: eu.gcr.io/foo/bar
args: ["arg1"]
artifacts:
objects:
location: "gs://foo-bar/go/"
paths: ["/output/*"]
我的期望是,与 CloudBuild 示例类似,它将获取最后一个 Container 的 /output
目录并将其所有文件上传到 foo-bar/go
。保留通配符很重要,因为我事先不知道哪些文件将在 /output
.
相反,我收到错误消息:
ERROR: could not upload /output/* to gs://foo-bar/go/; err = exit status 1
ERROR
CommandException: 1 file/object could not be transferred.
CommandException: No URLs matched: /output/*
/output/*: Uploading path....
Artifacts will be uploaded to gs://foo-bar using gsutil cp
有人知道如何进行这项工作吗?
我会说正确的方法是确定“/输出”文件夹中的内容,因此在尝试存储数据之前,您可以尝试先列出文件夹,再列出工件。或者也可以使用“查找”命令查找输出文件夹。您可以将此 doc 用作指南,其中使用“bash”
作为入口点执行脚本通过使用 volume 的显式 gsutil 调用使其工作。 在这一点上,我可以假设文档中的某些示例实际上不起作用。不过,这对我有用:
- name: eu.gcr.io/foo/bar
args: ["arg1"]
volumes:
- name: data
path: /output
- name: gcr.io/cloud-builders/gsutil
args: ["cp", "/output/*", "gs://foo-bar/go/"]
volumes:
- name: data
path: /output
不如 artifacts
灵活,但至少它完成了工作。
晚了 2 年,但我找到了这个问题的答案。
我在遇到问题时遇到了这个问题。试图在桶上获取工件导致 No URLs matched
。
问题是如果没有您创建的卷,输出文件夹将无法保留。默认情况下,Cloud Build 会在步骤之间保留一个文件夹,即 /workspace
文件夹。如果您将 eu.gcr.io/foo/bar
容器设置为输出到 /workspace
文件夹,则以下内容将存储工件。
- name: eu.gcr.io/foo/bar
args: ["arg1"]
artifacts:
objects:
location: "gs://foo-bar/go/"
paths: ["/output/*"]
在 yaml 中,还有选项 dir
可让您设置工作目录。还有更多信息 here。我没有深入研究这个问题,但可能会提供一个更简单的解决方案。