簡體   English   中英

Cloud Build 環境變量未傳遞到 GAE 上的 Django 應用程序

[英]Cloud Build env variables not passed to Django app on GAE

我有一個在 Google AppEngine 標准環境上運行的 Django 應用程序。 我已經從 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 的 Execution Details 選項卡下看到實際設置了變量。

問題是,我的 Django 應用程序無法訪問SHORT_SHATAG_NAME (按照https://cloud.google.com/cloud-build/docs/configuring-builds/substitute-variable-values#using_user-defined_substitution的說明進行操作)。 但是,如果我在 app.yaml 文件中使用env_variables下的硬編碼值設置它們,那么我的 Django 應用程序可以訪問這些硬編碼值(並且在我的構建中設置的值不會覆蓋那些在 app.yaml 中硬編碼的值)。

為什么是這樣? 我是否訪問它們/設置不正確? 我應該以某種方式在 app.yaml 中設置它們嗎?

我什至在我的一個視圖中打印了整個os.environ字典,以查看它們是否只是用不同的名稱或其他東西在那里,但它們不存在在那里。

不是最干凈的解決方案,但我使用這篇中等帖子作為我的解決方案的指導。 我假設runserver命令沒有被傳遞那些 env 變量,並且這些變量僅用於app deploy命令。

  1. 編寫 Python 腳本以將當前環境變量轉儲到項目目錄中的.env文件中
  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'
  1. 通過 Cloud Build 的 Edit Trigger 頁面中的 Substitution Variables 部分設置變量
  2. 現在,當app deploy發生時,您的應用程序應該具有這些環境變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM