Переменные Google AppEngine ENV из Google Cloud Build Dockerfile - PullRequest
0 голосов
/ 28 августа 2018

Итак, у меня есть триггер CloudBuild, который создает мой cloudbuild.yaml файл, и это все прекрасно и просто. Я также использую конструктор gcloud для запуска команд docker для передачи переменных ENV в мой Dockerfile. например:

steps:
- name: 'gcr.io/$PROJECT_ID/swift:4.2'
  args: ['test']
  id: 'Running unit tests'

- name: 'gcr.io/cloud-builders/docker'
  args: ['build','--build-arg', 'PROJECT=$PROJECT_ID','-t', 'us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA', '.']
  id: 'Building docker image'

- name: 'gcr.io/cloud-builders/docker'
  args: ["push", "us.gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA"]
  id: 'Pushing built image to registry'

- name: 'gcr.io/cloud-builders/gcloud'
  args: ['app', 'deploy']
  id: 'Deploying to AppEngine'
timeout: 1800s # 30 minute timeout

Как видите, я использую переменные ENV, которые по умолчанию имеют все ресурсы GCP (например, $PROJECT_ID). И в команде docker я передаю ее в качестве аргумента, чтобы я мог использовать команду ARG в файле docker:

ARG PROJECT
FROM gcr.io/${PROJECT}/swift:4.2 as builder
WORKDIR /App
#Other commands....

Теперь все это работает нормально, и я могу создать свой образ и т. Д. Теперь я хочу развернуть его в движке приложения на последнем этапе. Единственная проблема заключается в том, что я использую тот же Dockerfile для использования базового образа swift:4.2, который находится только в моем GoogleContainerRegistry, поэтому мне нужно $PROJECT_ID для моего проекта, чтобы извлечь это.

Мой вопрос: есть ли способ, чтобы среда сборки AppEngine передавала аргументы сборке Docker, которая создает мой образ при развертывании? У меня есть файл app.yaml, и я знаю, что есть свойство env_variables:, и я знаю, что смогу использовать команду docker ARG или ENV (не помню, какая именно), чтобы получить мой $PROJECT_ID внутри моего Dockerfile. Но единственная проблема в том, что AppEngine не имеет этого свойства, насколько я знаю. Единственное, о чем я могу думать, это echo шаг $PROJECT_ID от Cloud Builder до конца app.yaml файла. Но если есть более чистый подход, я хотел бы услышать об этом. Спасибо!

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, что нашел решение для своих нужд.

gcloud app deploy имеет флаг image-url, который может указывать уже созданный образ, а не перестраивать Dockerfile. Так что я пошел с этим как мой окончательный cloudbuild.yaml

 - name: 'gcr.io/cloud-builders/gcloud'
   args: ['app', 'deploy', '--image-url', 'gcr.io/$PROJECT_ID/$BRANCH_NAME:$SHORT_SHA']

По сути, укажите на изображение, которое я только что создал и поместил в реестр моего контейнера.

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