【发布时间】:2016-04-21 06:11:14
【问题描述】:
在实际问题之前,让我解释一下我们的架构。我们在我们的服务器上通过 ssh 使用 git,并启用了 post-recieve 挂钩来设置代码。代码都保存在一个单独的文件夹中。我们需要的是,每当有人将代码推送到服务器时,它就会在实时站点上运行测试、迁移和更新。目前,每当应用程序在模型中进行更新时,它都会崩溃。
我们需要的是钩子脚本检测代码是否正确的方法,正确的意思是没有语法错误等,然后运行迁移并使用新代码更新当前应用程序而无需停机。我们使用 nginx 代理 django 应用程序,virtualenv 用于从 requirements.txt 文件安装包,并使用 gunicorn 进行部署。
基线是,如果在任何时候失败,推送提交都应该被拒绝。如果所有测试都成功,它应该迁移到 dbs 并从新应用程序开始。
虽然我有两个端口用于相同的。一个运行主应用程序,另一个运行推送提交。如果推送代码测试成功,将 nginx 上的端口更改为 git application 并重新加载 nginx。如果有的话,请讨论这个应用程序的缺点。以及一个示例 post-commit 脚本来展示如何在失败的情况下拒绝 git commit。
【问题讨论】: