Облако Google — создание облака и замена переменных приложений в триггере

#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"