【问题标题】:App Engine: different app.yaml files based on environmentApp Engine:基于环境的不同 app.yaml 文件
【发布时间】:2015-02-02 16:51:05
【问题描述】:

我目前正在将一个应用程序迁移到 Google App Engine,该应用程序依赖于各种外部连接的环境变量。看起来 app.yaml 文件是我应该设置这些配置的地方,但是如何管理这些变量可能不同的不同环境(开发、测试、登台、生产)?

仅使用不同的 app.yaml 文件为这些环境中的每一个创建一个分支是最简单的解决方案吗?

【问题讨论】:

  • 最好有不同的文件,例如dev.yaml staging.yaml 等等。然后,您可以使用这些文件显式运行 dev_server,并且在部署时将始终使用 app.yaml。
  • @PaulCollingwood 是否有使用特定配置文件运行的命令?我在文档中没有看到。
  • 你可以说 dev_appserver somefile.yaml 它会使用它。非常便利。但仅限于本地,而不是刺激 afaik。
  • 你看过cloud.google.com/appengine/docs/python/tools/appengineconfig 吗?您可以打开 appid 进行不同的设置。
  • 你现在可以做gcloud app deploy --appyaml=...

标签: google-app-engine environment-variables development-environment


【解决方案1】:

app.yaml 可以为应用程序的其余部分设置环境变量,但它无法检查它们并根据它们的传入值执行不同的操作。因此,您确实需要将不同的app.yaml 文件呈现给您正在使用的任何部署过程。

至于准备正确的 app.yaml 作为 GAE 部署的初步步骤的最佳方式,这是一个更微妙的 devops 问题。正如您所提到的,您的 git 或 hg 或其他任何东西中的分支都可以工作,但就个人而言(也许只是运气不好?-)我经常发现我的结构越简单越好,并且分支打算长寿(如与打算很快合并回后备箱的临时偏差相反)让我头疼得更厉害。

所以,由我决定,我将有一个带有所需 if/else 逻辑的 preapp.yaml 模板(可能是 jinja2,无论如何),并从中准备正确的 app.yaml,作为第一步使用简单的 Python 脚本进行任何部署。

目前测试版gcloud preview deployment-manager 所使用的架构类型(用于所有类型的配置文件,因此会带来更多不可避免的复杂性),请参阅https://cloud.google.com/deployment-manager/,所以当然我可能会偏向于这种方法(但正如我提到的,我的偏见主要来自之前糟糕的部署经验:-)。

【讨论】:

  • 我想更好地理解它在实践中是如何工作的——也许,由于 app.yaml 需要与服务位于同一文件夹中,因此可能会生成多个文件(例如 app_dev .yaml, app_testing.yaml),然后你会调用 gcloud app deploy 哪个文件作为参数?提前谢谢你。
【解决方案2】:

我需要一个可以与 CD 管道配合使用的解决方案。我在我的 git 存储库上使用构建触发器。使用这些,我可以将要启动的分支名称模板化到我的 cloudbuild.yaml 文件中。然后,我的第一个构建步骤是使用 branch_name 作为条件值从 shell 脚本生成 app.yaml。

# cloudbuild.yaml
- name: 'ubuntu'
  args: ['bash', 'app.yaml.sh', '$BRANCH_NAME']

【讨论】:

    【解决方案3】:

    出于同样的原因,我刚刚遇到了这个问题。我最终为每个开发者创建了别名,并且 prod:

    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'
    

    【讨论】:

      【解决方案4】:

      如果您运行 gcloud app deploy --help,它表示您可以将路径传递给您想要用于部署的 .yaml

      EXAMPLES
          To deploy a single service, run:
      
              $ gcloud app deploy ~/my_app/app.yaml
      

      假设您有一个要部署到的qa, uat, and prod 环境。您可以轻松地为每个文件创建 app.[env].yaml 文件,然后只需根据某些环境变量或 CI/CD 管道中的某些内容传入您想要定位的文件路径。

      https://cloud.google.com/sdk/gcloud/reference/app/deploy#:~:text=POSITIONAL%20ARGUMENTS,in%20the%20DEPLOYABLE.

      【讨论】:

        猜你喜欢
        • 2017-08-24
        • 1970-01-01
        • 2015-01-28
        • 2018-12-31
        • 2019-06-06
        • 1970-01-01
        • 2020-03-19
        • 2019-08-05
        • 2011-04-23
        相关资源
        最近更新 更多