我的应用程序代码位于 master 分支中的 git 存储库中,我曾经从该分支部署到 my_app GAE 项目。和你一样,我想要一个登台环境。
所以我创建了一个新的my_app-dev GAE 项目,它将作为暂存环境,专门从master 分支进行部署。
然后,我从 master 分支(实际上是应用程序代码的 git 控制副本)中提取了一个 production 分支,我现在将其用作 my_app(生产)GAE 项目的专有部署源。
为了降低部署到错误应用程序的风险,我决定仅通过从项目目录中的 cmds 文本文件(添加到 git 存储库)中复制粘贴预煮 cmds 以及完整的部署命令来部署代码到相应的 GAE 应用程序。我在master 分支中创建了这个文件,看起来像这样(我使用的是 GAE SDK,而不是 gcloud):
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update main/main.yaml apartci/apartci.yaml buildin/buildin.yaml
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_dispatch .
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_indexes -A my_app-dev main
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_cron -A my_app-dev .
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_queues -A my_app-dev .
然后我将文件合并到 production 分支中,并为生产 GAE 应用程序更新它(并添加了 git cmds 以将在暂存环境中验证的 master 分支更改合并到生产中):
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update main/main.yaml apartci/apartci.yaml buildin/buildin.yaml
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_dispatch .
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_indexes -A my_app main
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_cron -A my_app .
/usr/bin/python2.7 /usr/local/google_appengine/appcfg.py update_queues -A my_app .
### merge into production:
git checkout master; git pull; git checkout production; git merge master
### check deltas between master and production:
git diff master..production
所以现在我有 2 个用于 2 个环境的并排目录:my_app-staging 和 my_app-production,分别包含从 master 和 production 分支提取的 git 工作区。我在 my_app-staging 工作,直到我对结果感到满意,然后我切换到 my_app-production 并复制粘贴 cmd 以合并更改并部署到生产中。
我随时可以在my_app-production 中检查暂存分支和生产分支之间的增量(很可能除了 GAE 应用名称之外还有其他分支):
git diff master..production
更新
在实际的 GAE 应用程序方面,我不知道克隆功能。我在开发过程的早期手动克隆了我的应用程序,当时没有很多配置。之后需要大多数配置添加/更改,我总是将它们应用于两个应用程序。
可能可以使用Google App Engine Admin API 创建这样的实用程序。但是我还没用过,不知道是不是涵盖了一个完整克隆过程的所有旋钮。