我们最近一直在寻找Mercurial的一些工作流程,因为我们开始将它用于我们的Web开发。我们需要一种自动方式将推送到测试和实时实例的更改传播到多个端点。这是一个想法的图表:
+-------+
|Dev |
| |
+-------+
| Push
+--------+
|
V
+-------+ Push +-------+
|Live |<--------|Test |
|server | |server |
+-------+ +-------+
| +-------+ | +-------+
+--->|Live 1 | +--->|Test 1 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 2 | +--->|Test 2 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 3 | +--->|Test 3 |
| | | |
+-------+ +-------+
基本上,我们的想法是,我们作为开发人员必须做的就是,一旦开发达到稳定水平,就发出推送命令(它不一定只是{{1} })到测试服务器,从那里它会自动传播出去。然后,一旦完成测试,我们就会将它从测试推送到实时(或者,如果它更容易,我们可以从dev推送到实时),那么它也会传播到每个不同的实例。
如果我们能够相当容易地添加新的测试和实时实例(例如,如果IP存储在可以由脚本读取的数据库中等等,那将是很好的。)
实现这一目标的最佳方法是什么?我知道Mercurial钩子。也许钩子会运行的进程内脚本?我也调查了Fabric,这是一个不错的选择吗?
此外,每个端点需要什么样的支持软件?如果每个服务器上都存在Mercurial存储库,那会是最简单的吗? SSH访问是否有益?等...
答案 0 :(得分:3)
我使用Mercurial,Fabric和Jenkins完成了类似的操作:
+-------+
| Devs |
+-------+
| hg push
V
+-------+
| hg | "central" (by convention) hg repo
+-------+\
| \
| +--------------+
| Jenkins job | Jenkins job
| pull stable | pulls test
| branch & compile | branch & compile
| +-------+ |
| +----|Jenkins|-----+ |
| | +-------+ | |
V | | V
+-------+ +-------+
| "live"| | "test"| shared workspaces ("live", "test")
+-------+ +-------+
| Jenkins job | Jenkins job <-- jobs triggered
| calls fabric | calls fabric manually in
| +-------+ | +-------+ Jenkins UI
|--> | live1 | |--> | test1 |
ssh | +-------+ ssh | +-------+
| +-------+ | +-------+
|--> | live2 | |--> | test2 |
| +-------+ | +-------+
| ... | ...
| +-------+ | +-------+
+--> | liveN | +--> | testN |
+-------+ +-------+
直接解决您的一些问题: