Итак, у меня есть триггер 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
файла. Но если есть более чистый подход, я хотел бы услышать об этом. Спасибо!