【问题标题】:How do I retrieve assets from a Google Storage bucket within a Google Container Registry automated build?如何在 Google Container Registry 自动构建中从 Google Storage 存储桶中检索资产?
【发布时间】:2018-06-20 03:24:00
【问题描述】:

我在 Google 的 Container Registry 中创建了一个镜像 GitHub 存储库,然后创建了一个构建触发器。 repo 中的 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 角色。我尝试添加存储对象查看器,但仍然出现错误。

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

【问题讨论】:

    标签: google-container-registry google-container-builder


    【解决方案1】:

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

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

    或者,您可以尝试GCS Fetcher

    【讨论】:

    • 我目前没有使用 Container Builder 构建配置文件。我只使用 Dockerfile。这是必需的吗?我将努力将我的 Dockerfile 转换为 YAML...
    • 不,gsutilDockerfile 中的调用不起作用。相反,像我上面展示的那样(或使用 GCS Fetcher)进行第一个构建步骤,然后执行 docker build 的第二个步骤。
    【解决方案2】:

    为了具体说明@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 Cloud Source 中提取一个 repo。我需要遵循相同的步骤吗?另外,我是否需要构建一个cloudbuild.yaml 文件来伴随Dockerfile
    猜你喜欢
    • 2021-03-28
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多