62

正确配置开发服务器和生产服务器后,我想设置一个暂存环境,用于在将新开发版本部署到生产之前对其进行实时测试。

我知道两种不同的方法:

A.第一个选项是修改app.yaml 版本参数。

version: app-staging

我不喜欢这种方法的是生产数据被我的暂存测试污染了,因为(如果我错了,请纠正我):

  1. 暂存版本和生产版本共享同一个数据存储
  2. 暂存版本和生产版本共享相同的日志

关于第一点,我不知道是否可以使用新的命名空间 python API来“修复”它。

B.第二种选择是通过修改app.yaml 应用参数

application: foonamestaging

使用这种方法,我将创建完全独立于生产版本的第二个应用程序。
我看到的唯一缺点是我被迫配置第二个应用程序(管理员设置)。
使用像Gaebar这样的备份\恢复工具,这个解决方案也很有效。

您使用哪种方法为您的 Web 应用程序设置暂存环境?
另外,您是否有任何自动化脚本可以在部署之前更改 yaml?

4

7 回答 7

17

如果需要单独的数据存储,选项 B 对我来说看起来更干净,因为:

  1. 您可以保留版本功能以对生产应用程序进行实际版本控制。
  2. 您可以保留版本功能以进行流量拆分。
  3. 您可以为多租户保留命名空间功能。
  4. 您可以轻松地将实体从一个应用程序复制到另一个应用程序。命名空间之间并不容易。
  5. 很少有 API 仍然不支持命名空间。
  6. 对于有多个开发人员的团队,您可以授予一个人上传到生产的权限。
于 2012-04-23T11:47:55.250 回答
14

我在设置中选择了第二个选项,因为它是最快的解决方案,而且我还没有编写任何脚本来更改部署时的应用程序参数。

但在我现在看来,选项 A 是一个更清洁的解决方案。您可以使用几行代码根据版本切换数据存储区命名空间,您可以从环境变量 CURRENT_VERSION_ID 动态获取,如下所述:http ://code.google.com/appengine/docs/python/runtime.html #The_Environment

于 2010-09-27T15:26:38.807 回答
6

我们选择了选项 B。我认为总的来说它更好,因为它完全隔离了项目。因此,例如在临时服务器上玩一些配置不会影响也不会损害安全性或在您的生产环境中造成任何其他蝴蝶效应。

至于部署脚本,您可以在 app.yaml 中使用任何您想要的应用程序名称。一些虚拟/开发名称,当您部署时,只需使用一个-A参数:

appcfg.py -A your-app-name update .

这将大大简化您的部署脚本,无需在您的 app.yaml 中进行字符串替换或任何类似操作

于 2015-10-20T12:25:38.693 回答
4

We use option B.

In addition to Zygmantas suggestions about the benefits of separating dev from prod at application level, we also use our dev application to test performance.

Normally the dev instance runs without much available in the way of resources, this helps to see where the application "feels" slow. We can then also independently tweak the performance settings to see what makes a difference (e.g. front-end instance class).

Of course sometimes we need to bite the bullet and tweak & watch on live. But it's nice to have the other application to play with.

Still use namespaces and versions, just dev is dirty and experimental.

于 2012-10-13T11:51:30.817 回答
0

这是谷歌文档所说的:

一般建议是每个环境的每个应用程序都有一个项目。例如,如果您有两个应用程序“app1”和“app2”,每个应用程序都有一个开发和生产环境,那么您将有四个项目:app1-dev、app1-prod、app2-dev、app2-prod。这将环境彼此隔离,因此对开发项目的更改不会意外影响生产,并为您提供更好的访问控制,因为您可以(例如)授予所有开发人员对开发项目的访问权限,但限制对 CI/CD 的生产访问管道

考虑到这一点,dispatch.yaml在根目录中添加一个文件,并在代表单个服务并包含该服务的每个目录或存储库中,添加一个app.yaml文件以及相关的源代码,如下所述:Structuring web services in App Engine

编辑,如果您使用的是 python,请查看 python 部分中的等效链接。

于 2021-04-15T04:49:51.097 回答
0

无需创建单独的项目。您可以使用 dispatch.yaml 将您的暂存 URL 路由到同一项目中的另一个服务(暂存)。

  1. 创建自定义域 staging.yourdomain.com
  2. 创建一个单独的 app-staging.yaml,用于指定暂存服务。

    ...服务:分期...

  3. 创建包含类似内容的 distpatch.yaml

    ...

    • url: "*staging.mydomain.com/" 服务: staging

    • url: "*mydomain.com/" 服务: 默认 ...

  4. gloud app deploy app-staging.yaml dispatch.yaml
于 2020-04-29T02:24:09.747 回答
0

在 app.yaml 中的使用application已被关闭。

相反,谷歌推荐 gcloud app deploy --project [YOUR_PROJECT_ID]

请参阅https://cloud.google.com/appengine/docs/standard/python/config/appref

于 2021-10-15T04:41:28.830 回答