Переменные Google AppEngine ENV из файла Dockerfile Google Cloud Build

Итак, у меня есть триггер CloudBuild, который создает мой cloudbuild.yaml файл, и все это прекрасно и здорово. Я также использую конструктор gcloud для запуска команд докеров для передачи переменных 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 (например, _ 4_). И в команде 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 передавала аргументы сборке докера, которая создает мой образ при развертывании? У меня есть файл app.yaml, и я знаю, что есть свойство env_variables:, и я знаю, что смогу использовать команду docker ARG или ENV (не могу вспомнить, какую), чтобы поместить свой $PROJECT_ID в свой файл Dockerfile. Но единственная проблема заключается в том, что, насколько мне известно, в AppEngine это свойство не определено. Единственное, что я могу придумать, - это echo шаг $PROJECT_ID от Cloud Builder до конца app.yaml файла. Но если есть более чистый подход, я бы хотел услышать об этом. Спасибо!


person Andrew Edwards    schedule 28.08.2018    source источник


Ответы (1)


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

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']

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

person Andrew Edwards    schedule 29.08.2018