如何在多个开发环境中使用GAE的dispatch.yaml?

时间:2017-09-02 16:46:28

标签: google-app-engine google-cloud-platform app-engine-flexible

我正在尝试了解Google App Engine的dispatch.yaml文件。

我们有一个带有前端和后端的香草网络应用程序。我们还拥有开发和生产环境。这两种环境在GAE上都有两项服务 - frontenddefault,这是后端。

我们有一个带有前端和后端的香草网络应用程序。我们还拥有开发和生产环境。我们在GAE上有两个服务 - 前端和默认,即后端。我们在GAE上有两个项目 - staging,这是我们的开发环境,production,这是我们的生产环境。暂存环境是从我们的前端和后端的dev分支构建的。生产环境由我们的主人在我们的前端和后端构建。

我们希望为登台和生产环境使用自定义路由。

我尝试使用dispatch_staging.yamldispatch_prod.yaml来区分文件,但GAE无法识别这些文件名。我想我们可以重命名前端服务,但看起来无法绕过default

如何使用dispatch.yaml指定正在构建的环境?

3 个答案:

答案 0 :(得分:3)

我解决这个问题的方法是为应用程序代码使用不同的repo分支。

  • my_app-dev分支版本部署到production - 开发环境应用
  • my_app分支版本部署到dispatch.yaml - 生产环境应用

这样文件的名称始终为dispatch.yaml。服务名称不会在不同环境之间发生变化,但与之关联的自定义域名会发生变化 - 并且这些名称会反映在2个分支中$ git diff production master -- dispatch.yaml diff --git a/dispatch.yaml b/dispatch.yaml index 0768a6a..c1326cf 100644 --- a/dispatch.yaml +++ b/dispatch.yaml @@ -1,14 +1,14 @@ -application: my_app +application: my_app-dev dispatch: - - url: "service1.my_app.com/*" + - url: "service1-dev.my_app.com/*" module: service1 - - url: "service1-dot-my_app.appspot.com/*" + - url: "service1-dot-my_app-dev.appspot.com/*" module: service1 - url: "*/service1/*" module: service1 - - url: "service2.my_app.com/*" + - url: "service2-dev.my_app.com/*" module: service2 - - url: "service2-dot-my_app.appspot.com/*" + - url: "service2-dot-my_app-dev.appspot.com/*" module: service2 文件的内容中:

Spinners

注意:我在应用级别实施不同的环境(与服务级别相反,请参阅Advantages of implementing CI/CD environments at GAE project/app level vs service/module level?)。服务级别的实现不能使用这种方法。

答案 1 :(得分:3)

我知道这是一个老问题,但是我刚刚发现了一些有趣的东西,可以帮助每个想要部署到不同环境的人。 经过大量的反复试验,我发现gcloud要求将作为参数给出的调度文件称为dispatch.yaml。如果您以其他任何方式调用它,例如dispatch-staging.yamldev-dispatch.yaml,它将无法正常工作。 但是,这就是我发现的技巧,该文件不必位于项目的根文件夹中。 因此,在我们的项目中,我这样做了:

  1. <project_root>/dispatch.yaml-用于生产
  2. <project_root>/deploy-staging/dispatch.yaml-用于登台

现在我可以做cd <project_root>,然后:

  1. gcloud --project <production> app deploy ./dispatch.yaml
  2. gcloud --project <staging> app deploy ./deploy-staging/dispatch.yaml

换句话说,gcloud不在乎dispatch.yaml文件位于哪个目录中,只要它被称为dispatch.yaml

答案 2 :(得分:0)

我也遇到了与您相同的问题,我来为您提供第三个解决方案。 如果您有多个开发环境,那么您可能会进行自动部署(就我而言,使用Gitlab-CI)。 在部署实习期间,我按以下步骤进行操作,我复制(或重命名)调度文件:

  • 测试:./gcp.dispatch.testing.yml => ./dispatch.yml
  • 生产:./gcp.dispatch.production.yml => ./dispatch.yml

这是我的gitlab-ci.yml文件中一个阶段的示例(用于测试):

testing__deploy__gcp_dispatch:
  stage: dispatch
  image: google/cloud-sdk:alpine
  script:
    - cd ${CI_PROJECT_DIR}
    - gcloud auth activate-service-account --key-file ${GCP_SERVICE_KEY_FILE}
    - cp ./gcp.dispatch.testing.yml ./dispatch.yml
    - gcloud --quiet --project ${GCP_PROJECT_ID} app deploy ./dispatch.yml

你去!

PS: 我知道,错误Unexpected attribute 'dispatch' for object of type AppInfoExternal.的来源。 gcloud不接受文件名与dispatch.yml ...

不同