Предоставьте доступ к корзине хранения Google для Google Build при создании образа Docker - PullRequest
0 голосов
/ 15 июня 2019

Я новичок в облачных службах Google и пытаюсь настроить автоматическую сборку своего производства, требующую загрузки тяжелого файла.

Я хочу загрузить файл из выделенного хранилища Google Storage внутрипроцесс сборки Docker.Для этого я добавил следующую строку в свой Dockerfile:

RUN curl https://storage.cloud.google.com/[bucketname]/[filename] -o [filename]

Поскольку файлы из этого сегмента не должны быть общедоступными, я отключил разрешение на уровне объектов и добавил в член [ProjectID]@cloudbuild.gserviceaccount.comправо Storage Object Viewer.

Но при запуске сценария файла Docker загруженный файл становится пустым

Step 7/9 : RUN curl https://storage.cloud.google.com/[bucketname]/[filename] -o [filename]
 ---> Running in 5d1a5a1bbe87
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
Removing intermediate container 5d1a5a1bbe87
 ---> 42938a9cc8d1
Step 8/9 : RUN ls -l [filename]
 ---> Running in 34ac112051a1
-rw-r--r-- 1 root root 0 Jun 15 00:37 [filename]

Эта ссылка прекрасно работает, если я войду в google.console и получу к нему доступ черезмой навигатор.

Я попытался изменить настройки разрешений и в итоге добавил cloud build account, storage legacy bucket reader, storage legacy object reader, storage object viewer без особого успеха.

Я, очевидно, делаючто-то не так.Но мне не ясно, если:

  • Этот формат ссылки действителен только в консоли, и я должен использовать другой URL-адрес, чтобы получить этот файл
  • Неправильная конфигурация разрешения
  • Мне еще нужно обработать http-авторизацию через curl
  • Я пропускаю что-то еще.

Спасибо за вашу помощь:)

1 Ответ

1 голос
/ 15 июня 2019

После долгих исследований, попыток и ошибок, мне удалось найти хороший способ сделать это.Вот рецепт для тех, кому может понадобиться воспроизвести аналогичную настройку, и мое будущее меня.

  • Создайте учетную запись службы в console.cloud.google.com / AIM & Admin , предназначенный для этой задачи (Вы также можете использовать облачную оболочку https://cloud.google.com/iam/docs/creating-managing-service-accounts)
  • . Создать ключ для этой учетной записи службы (вы можете использовать веб-консоль или ввести gcloud iam service-accounts keys create ~/key.json --iam-account [SA-NAME]@[PROJECT-ID].iam.gserviceaccount.com в Cloud Shell (https://cloud.google.com/iam/docs/creating-managing-service-account-keys#iam-service-account-keys-create-gcloud)
  • Добавьте этот файл в свой репозиторий. Установите Cloud Shell в Docker, чтобы вы могли войти в систему (верно, вы собираетесь установить целоеSDK просто войти в систему ...):
RUN curl https://sdk.cloud.google.com | bash > /dev/null
ENV PATH="${PATH}:/root/google-cloud-sdk/bin"

Поздравьте себя с шоколадным тортом или сладким угощением.(:

Бонус: если, как и я, ваш тайм-аут сборки докера, вы должны добавить cloudbuild.yaml рядом с вашим Dockerfile. Вот общий файл, который я использую для своих сборок:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID', '.' ]
images:
- 'gcr.io/$PROJECT_ID/$REPO_NAME:$BUILD_ID'
timeout: 900s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...