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

Mik*_*ike 3 google-app-engine google-cloud-platform app-engine-flexible

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

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

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

我们想在登台和生产环境中使用自定义路线。

我尝试使用dispatch_staging.yamldispatch_prod.yaml区分文件,但GAE无法识别这些文件名。我猜我们可以重命名前端服务,但是看起来好像没有办法解决default

您如何使用它dispatch.yaml来指定要构建的环境?

Dan*_*scu 5

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

  • master分支版本部署到my_app-dev-开发环境的应用程序
  • production分支版本部署到my_app-生产环境中的应用

这样文件总是被命名为dispatch.yaml. 服务名称不会在环境之间更改,但与它们关联的自定义域名会更改 - 这反映在dispatch.yaml2 个分支中的文件内容中:

$ 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
Run Code Online (Sandbox Code Playgroud)

注意:我正在应用程序级别实施不同的环境(与服务级别相反,请参阅在 GAE 项目/应用程序级别与服务/模块级别实施 CI/CD 环境的优势?)。服务级实现不能使用这种方法。


Pat*_*aba 5

我知道这是一个古老的问题,但是我刚刚发现了一些有趣的东西,可以帮助想要部署到不同环境的每个人。经过大量的尝试和错误,我发现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