Переменные env Cloud Build не передаются приложению Django в GAE - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть приложение Django, работающее в стандартной среде Google AppEngine. Я настроил триггер облачной сборки из моей главной ветки в Github, чтобы выполнить следующие шаги:

steps:
  - name: 'python:3.7'
    entrypoint: python3
    args: ['-m', 'pip', 'install', '--target', '.', '--requirement', 'requirements.txt']
  - name: 'python:3.7'
    entrypoint: python3
    args: ['./manage.py', 'collectstatic', '--noinput']
  - name: 'gcr.io/cloud-builders/gcloud'
    args: ['app', 'deploy', 'app.yaml']
    env:
    - 'SHORT_SHA=$SHORT_SHA'
    - 'TAG_NAME=$TAG_NAME'

На вкладке Сведения о выполнении в Cloud Build я вижу, что переменные были фактически установлены.

Проблема в том, что SHORT_SHA и TAG_NAME недоступны из моего приложения Django (следуя инструкциям в https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values#using_user -defined_substitutions )! Но если я установлю их в своем файле app.yaml с жестко закодированными значениями в env_variables, тогда мое приложение Django сможет получить доступ к этим жестко закодированным значениям (и значения, установленные в моей сборке, не перезаписывают те, которые жестко закодированы в app.yaml).

Почему это? Я к ним обращаюсь / неправильно их настраиваю? Должен ли я как-то устанавливать их в app.yaml?

Я даже напечатал весь словарь os.environ в одном из моих представлений, чтобы посмотреть, были ли они там просто с другими именами или чем-то, но их нет там.

1 Ответ

0 голосов
/ 16 апреля 2020

Не самое чистое решение, но я использовал этот средний пост в качестве руководства для моего решения. Я предполагаю, что команда runserver не передает эти переменные env, и что эти переменные используются только для команды app deploy.

  1. Напишите сценарий Python, чтобы вывести текущую среду переменные в файле .env в проекте dir
  2. В файле настроек прочитайте переменные env из файла .env (для этого я использовал библиотеку django -environ)
  3. Добавить шаг в облачный файл сборки, который запускает ваш новый скрипт Python и передает переменные env на этом шаге (на этом этапе вы по сути выкидываете эти переменные в файл .env)
  - name: 'python:3.7'
    entrypoint: python3
    args: ['./create_env_file.py']
    env:
    - 'SHORT_SHA=$SHORT_SHA'
    - 'TAG_NAME=$TAG_NAME'
Установите переменные в разделе «Переменные замещения» на странице «Редактировать триггер» в Cloud Build Теперь ваше приложение должно иметь эти переменные env, когда app deploy происходит
...