gcloud auth не работает внутри dockerfile - PullRequest
1 голос
/ 26 февраля 2020

Я создал многоступенчатый докер-файл, который устанавливает мои npm пакеты и затем пытается развернуть их в gcp

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

WARNING: Could not open the configuration file: [/root/.config/gcloud/configurations/config_default].
ERROR: (gcloud.functions.deploy) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

Вот мой dockerfile:

FROM node:10.19.0-alpine3.9 AS build

ADD . /app
WORKDIR /app

RUN npm install

FROM google/cloud-sdk

WORKDIR /app
COPY --from=build /app /app

RUN gcloud auth activate-service-account --key-file /app/firebase-service-account.json
RUN gcloud config set project MY_PROJECT
RUN gcloud config set account service-account-email@service-account.iam.gserviceaccount.com

Я также написал скрипт bash для создания и развертывания моей облачной функции

#! /bin/sh

docker build . -f deploy-functions.dockerfile -t cloud-functions-deploy

docker run cloud-functions-deploy gcloud functions deploy event-log-trigger \
--project ${GCP_PROJECT_ID} \
--entry-point eventLogBuilder \
--trigger-event providers/cloud.firestore/eventTypes/document.update \
--trigger-resource projects/${GCP_PROJECT_ID}/databases/\(default\)/documents/events/\{eventId\} \
--region=${GCP_REGION} --stage-bucket=${STAGE_BUCKET} --runtime nodejs10

В моем первом скрипте bash у меня не было флага --project, но мне нужно было добавить его, потому что он говорил, что у команды нет проекта. Похоже, что предупреждение является правильным, и он не может открыть файл config_default, хотя я все запускаю как root.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Вы можете решить эту проблему, создав entrypoint.sh файл

# entrypoint.sh
# Set your env variables GCP_PROJECT_ID, STAGE_BUCKET, GCP_REGION, ...
gcloud auth activate-service-account --key-file /app/firebase-service-account.json
gcloud config set project $GCP_PROJECT_ID
# your deploy command
gcloud functions deploy event-log-trigger \
--entry-point eventLogBuilder \
--trigger-event providers/cloud.firestore/eventTypes/document.update \
--trigger-resource projects/${GCP_PROJECT_ID}/databases/\(default\)/documents/events/\{eventId\} \
--region=${GCP_REGION} --stage-bucket=${STAGE_BUCKET} --runtime nodejs10

И установив эту информацию в Dockerfile

# previous stage ... 
FROM google/cloud-sdk

WORKDIR /app
COPY --from=build /app /app

RUN chmod +x /app/entrypoint.sh
ENTRYPOINT ["/bin/sh","/app/entrypoint.sh"]

Кажется, что команды не сохраняться после формирования изображения.

RUN gcloud auth activate-service-account --key-file /app/firebase-service-account.json
RUN gcloud config set project MY_PROJECT
RUN gcloud config set account service-account-email@service-account.iam.gserviceaccount.com

Я проверил это, выполнив команду

docker run cloud-functions-deploy gcloud config list
0 голосов
/ 27 февраля 2020

Для аутентификации вместо этого

RUN gcloud auth activate-service-account --key-file /app/firebase-service-account.json

Просто определите env var

ENV GOOGLE_APPLICATION_CREDENTIALS=/app/firebase-service-account.json

Для проекта и учетной записи вы можете добавить его в параметры своего gcloud звонки (с флагами --project и --account).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...