如何从 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/
我在 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/