如何从 Google Container Registry 自动构建中的 Google 存储桶中检索资产?

How do I retrieve assets from a Google Storage bucket within a Google Container Registry automated build?

我在 Google 的 Container Registry 中创建了一个镜像 GitHub 存储库,然后创建了一个构建触发器。存储库中的 dockerfile 包含 gsutil -m rsync -r gs://asset-bucket/ local-dir/ 以便我可以将共享的私有资产移动到容器中。 但是我得到一个错误:

ServiceException: 401 Anonymous caller does not have storage.objects.list access to asset-bucket

我有一个自动创建的用于构建的服务帐户 (@cloudbuild.gserviceaccount.com),它具有 Cloud Container Builder 角色。我尝试添加存储对象查看器,但仍然出现错误。

容器生成器不应该自动拥有适当的权限吗?

您是否使用 gcr.io/cloud-builders/gsutil 构建步骤来执行此操作?那应该正确使用默认凭据并且应该可以正常工作。

steps:
  - name: 'gcr.io/cloud-builders/gsutil'
    args: [ "-m", "rsync", "gs://asset-bucket/", "local-dir/" ]

或者,您可以尝试 GCS Fetcher

只是为了具体说明@david-bendory 的回答,特权调用不能在 dockerfile 中发生。我创建了一个看起来像这样的 cloudbuild.yaml

steps:
- name: 'gcr.io/cloud-builders/gsutil'
  args: [ "-m", "rsync", "-r", "gs://my-assets/", "." ]
  dir: "static"
- name: 'gcr.io/cloud-builders/docker'
  args: ['build', '-t', 'gcr.io/$PROJECT_ID/project-name', '.']
images: ['gcr.io/$PROJECT_ID/project-name']

和一个 dockerfile 其中包括

COPY static/* www/