我的应用程序代码位于 git 存储库中master
分支,从我以前部署到的地方my_app
GAE项目。就像你一样,我想要一个暂存环境。
所以我创建一个新的my_app-dev
GAE 项目,这将是临时环境,仅由master
branch.
然后我拉了一个production
分支从master
分支(实际上是应用程序代码的 git 控制副本),我现在将其用作my_app
(生产)GAE 项目。
为了降低部署到错误应用程序的风险,我决定仅通过从cmds
项目目录中的文本文件(添加到 git 存储库),包含将代码部署到适当的 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 命令来合并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
and my_app-production
,包含从以下位置拉取的 git 工作区master
and production
分别有分支。我在...工作my_app-staging
直到我对结果感到满意,然后我切换到my_app-production
并复制粘贴命令以合并更改并部署到生产中。
我可以随时检查暂存分支和生产分支之间的增量my_app-production
(除了 GAE 应用程序名称之外,很可能还会有其他名称):
git diff master..production
Update
在实际的 GAE 应用程序方面,我不知道克隆功能。我在开发过程的早期阶段手动克隆了我的应用程序,当时没有太多配置。大多数配置添加/更改的需求都是后来发生的,我总是将它们应用到这两个应用程序。
It might可以使用以下命令创建这样的实用程序Google 应用程序引擎管理 API。但我还没有使用它,我不知道它是否涵盖了完整克隆过程的所有旋钮。