Использование Google Cloud Source Repositories с учетной записью службы
Можно ли получить доступ к Google Cloud Source Repository в автоматическом режиме, то есть из экземпляра GCE, используя служебную учетную запись?
Единственный метод аутентификации, который я вижу в документах, - это использовать gcloud auth login
команда, которая будет аутентифицировать моего личного пользователя для доступа к репо, а не машину, с которой я запускаю команды.
4 ответа
Если вы хотите клонировать с git
вместо того, чтобы пробежать gcloud
, Вы можете запустить:
git config --global credential.helper gcloud.sh
... и тогда это будет работать:
git clone https://source.developers.google.com/p/$PROJECT/r/$REPO
На GCE vms работает
gcloud source repos clone default ~/my_repo
должен работать автоматически без дополнительного шага аутентификации, так как он будет использовать учетную запись службы виртуальных машин.
Если вы работаете на другом компьютере, вы можете скачать с https://console.cloud.google.com/ служебную учетную запись.json файл ключа и активировать его с помощью
gcloud auth activate-service-account --key-file KEY_FILE
и затем выполните вышеупомянутую команду клона.
В случае, если кто-то вроде меня пытался сделать это как часть Dockerfile, после непродолжительной борьбы мне только удалось заставить его работать так:
RUN gcloud auth activate-service-account --key-file KEY_FILE ; \
gcloud source repos clone default ~/my_repo
Как видите, ключ к тому, чтобы он был частью одной и той же команды RUN, в противном случае он продолжал давать сбой
ERROR: (gcloud.source.repos.clone) You do not currently have an active account selected.
- Разрешите доступ к облачному API-интерфейсу Cloud Source Repositories для экземпляра. Это следует делать при создании или редактировании экземпляра в консоли администратора.
- Из оболочки внутри экземпляра выполните
gcloud source repos clone <repo_name_in_cloud_source> <target_path_to_clone_into>
Если вы работаете на GCE, воспользуйтесь новым методом аутентификации, который требует меньше строк кода.
При создании экземпляра виртуальной машины в разделе "Доступ и безопасность" установите для "Облачной платформы" значение "Включено".
Тогда код аутентификации такой простой:
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
http = credentials.authorize(httplib2.Http())
См. https://developers.google.com/identity/protocols/application-default-credentials