Как получить ресурсы из корзины Google Storage в автоматизированной сборке Google Container Registry?

Я создал зеркальный репозиторий GitHub в реестре контейнеров Google, а затем создал триггер сборки. 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. Я попытался добавить средство просмотра объектов хранилища, но все равно получаю сообщение об ошибке.

Разве сборщик контейнеров не должен автоматически иметь соответствующие разрешения?


person dk.    schedule 20.06.2018    source источник


Ответы (2)


Используете ли вы шаг сборки gcr.io/cloud-builders/gsutil для этого? Это должно правильно использовать учетные данные по умолчанию, и это должно просто работать.

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

Кроме того, вы можете попробовать GCS Fetcher.

person David Bendory    schedule 20.06.2018
comment
В настоящее время я не использую файл конфигурации сборки Container Builder. Я использую только Dockerfile. Это требуется? Я буду работать над преобразованием моего Dockerfile в YAML... - person dk.; 21.06.2018
comment
Нет, вызов gsutil внутри Dockerfile не будет работать. Вместо этого сделайте первый шаг сборки, как показано выше (или с помощью GCS Fetcher), а затем второй шаг, который делает docker build. - person David Bendory; 22.06.2018

Просто чтобы уточнить ответ @david-bendory, привилегированные вызовы не могут выполняться внутри файла докеров. Я создал 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/
person dk.    schedule 23.06.2018
comment
Я пытаюсь сделать что-то подобное и получить репозиторий из Google Cloud Source во время моей автоматической сборки. Нужно ли мне выполнять те же действия? Кроме того, нужно ли мне создавать файл cloudbuild.yaml для сопровождения Dockerfile? - person chipoglesby; 04.10.2018