#google-cloud-platform #google-cloud-build #app.yaml
#google-облачная платформа #google-cloud-build #app.yaml
Вопрос:
Я использую cloudbuild для развертывания новой версии моего приложения, когда в github появляется новый коммит. Все работает хорошо.
Теперь я пытаюсь настроить замену переменных в конфигурации триггера, потому что я хочу один раз ввести номер своей версии в триггер, чтобы я мог найти правильную развернутую версию без изменения файла конфигурации cloudbuild. Подстановка переменных отлично работает в моем файле cloudbuild, например: (cloudbuild.yaml)
# TEST: PRINT VARIABLE IN LOG
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['-c', 'echo', '${_VERSION}']
# DEPLOY APP
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy", "-v", "${_VERSION}", "app.yaml"]
dir: 'frontend'
timeout: "20m"
${_VERSION} правильно заменяется строкой, которую я ввел в свой триггер.
Теперь я хочу получить тот же результат в файле app.yaml, заменив переменную env, что-то вроде: (app.yaml)
runtime: nodejs
env: flex
service: backend
env_variables:
VERSION: "${_VERSION}"
TEST_ENV: "read from google"
Когда я читаю TEST_ENV из своего приложения, оно работает, но _VERSION не заменяется.
Есть предложения?
Ответ №1:
При выполнении этого шага
# DEPLOY APP
- name: "gcr.io/cloud-builders/gcloud"
args: ["app", "deploy", "-v", "${_VERSION}", "app.yaml"]
dir: 'frontend'
timeout: "20m"
Команда app.yaml
gcloud предоставляется как есть и не оценивается. Вы должны обновить его вручную. Что-то вроде этого
# REPLACE: PUT THE CORRECT VALUE IN APP.YAML FILE
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
args: ['-c', 'sed', "-i", "sed -i "s/$${_VERSION}/${_VERSION}/g", 'app.yaml']
Конечно, если вы позволите
env_variables:
VERSION: "${_VERSION}"
как есть в вашем app.yaml
файле. Вы можете изменить эту строку замены
Комментарии:
1. Спасибо @guillaume blaquiere, ваш ответ не сработал (я думаю, что что-то плохое в строке аргументов), но вы указали мне правильный путь. Я решил проблему с помощью синтаксического анализа, я тоже опубликую свое решение.
Ответ №2:
Я хочу добавить это решение на случай, если у кого-то возникнут проблемы с решением, предложенным giullade (в моем случае cloudbuild выдал мне ошибку при выполнении команды sed).
Я также изменил свою строку замены на более читаемую и чтобы избежать экранирования знака $.
# Step 0: REPLACE variables in app.yaml file
- name: 'gcr.io/cloud-builders/gcloud'
entrypoint: 'bash'
dir: 'backend'
args:
- '-c'
- |
sed -i "s/__VERSION/${_VERSION}/g" app-staging.yaml
и в моем app.yaml:
env_variables:
VERSION_ENV: "__VERSION"