我目前正在将应用程序迁移到Google App Engine,该应用程序依赖于各种外部连接的环境变量。看起来app.yaml文件是我应该设置这些配置的地方但是如何管理这些变量可能不同的不同环境(开发,测试,登台,生产)?
最简单的解决方案是仅使用不同的app.yaml文件为每个环境创建分支吗?
答案 0 :(得分:9)
app.yaml
可为其他应用程序设置环境变量,但无法检查它们并根据其传入值执行不同的操作。因此,您需要向您正在使用的任何部署过程提供不同的app.yaml
文件。
至于准备好app.yaml
作为GAE部署的初步步骤的最佳方法,这是一个更微妙的devops问题。如你所说,你的git或hg中的分支或其他任何东西都可以工作,但是个人(也许只是运气不好? - )我经常发现我的结构越简单越好,分支越长(如反对意图很快合并回主干的暂时性偏离给我带来了更糟糕的头痛。
所以,由我来决定,我有一个preapp.yaml
模板(可能是jinja2,无论如何)和所需的if / else逻辑,并从中准备正确的app.yaml
,作为任何部署的第一步,使用简单的Python脚本。
对于当前版本gcloud preview deployment-manager
,使用的架构(对于所有类型的配置文件,因此具有更多不可避免的复杂性),请参见https://cloud.google.com/deployment-manager/,所以当然我可能有偏见采用这种方法(但正如我所提到的,我的偏见主要来自以前糟糕的部署经验: - )。
答案 1 :(得分:0)
我需要一个可以与CD管道一起使用的解决方案。我在git储存库上使用Build Triggers。使用这些,我可以将要启动的分支名称模板化到cloudbuild.yaml文件中。然后,我的第一个构建步骤是使用branch_name作为条件值从shell脚本生成app.yaml。
# cloudbuild.yaml
- name: 'ubuntu'
args: ['bash', 'app.yaml.sh', '$BRANCH_NAME']
答案 2 :(得分:0)
出于同样的原因,我刚遇到此问题。最后,我为每个开发人员创建了别名,然后创建了产品:
alias dev-deploy='cat dev.yaml > app.yaml; gcloud app deploy dev.yaml; rm app.yaml'
alias prod-deploy='cat prod.yaml > app.yaml; gcloud app deploy; rm app.yaml'