2

More and more server-side file deployments are handled using git. It's nice and there are plenty of guides available how to setup your deployment workflow with git, rsync and others.

However, I'd like to ask what's the cleanest way to set deployment rollbacks, so that

  • Every time you deploy, you record the latest state before the deployment (no need to manually read through logs to find the commit)

  • What git commands use to rollback to the prior (recorded) state in the case deployment has unforeseen consequences

The scope of the question is Linux servers, shell scripting and command line git.

4

2 回答 2

3

请注意,这个问题没有通用的解决方案。我会提出两种解决方案。

第一个需要使用Fabric并深入思考如何处理整个部署过程。对于我维护的一个 Django 站点,我编写了一个在每个 git commmit 上部署 staging 的结构脚本。然后,从 staging 部署到生产是一个简单的结构命令,它将所有文件复制到一个新文件夹(将版本增加 1),例如从 production/v55/ 到 production/v56/ (好的,它还进行备份和运行迁移)。如果出现任何问题,rollback命令会恢复备份,并从文件夹 production/v55 启动生产环境。少说话,多代码:https ://github.com/kiberpipa/Intranet/blob/master/fabfile.py

第二个选项需要更多的阅读并且具有更大的学习曲线,但也提供了更清洁的解决方案。正如列宁建议使用带有声明性配置的框架,我建议更进一步,学习一个带有声明性配置的 Linux 发行版 - http://nixos.org/。NixOS 具有用于分布式软件部署(包括回滚)的内置功能,以及从您的机器https://github.com/NixOS/nixops部署东西的工具。另请参阅有关分布式软件部署的论文,其中还涵盖了您的问题(作为更大问题的一部分): http: //www.st.ewi.tudelft.nl/~sander/index.php/phdthesis

于 2013-06-09T09:01:04.703 回答
0

请查看需要ruby​​/ror支持的CapistranoChef 。但是是很棒的部署工具。Python 的结构也是一个很棒的工具。

于 2013-06-09T08:48:58.143 回答