gpt4 book ai didi

deployment - 使用 Mercurial 在多台服务器上自动部署 Web

转载 作者:行者123 更新时间:2023-12-01 02:48:17 25 4
gpt4 key购买 nike

我最近一直在研究 Mercurial 的一些工作流程,因为我们开始将它用于我们的 Web 开发。我们需要一种自动化的方式来将推送到测试和实时实例的更改传播到多个端点。这是这个想法的示意图:

         +-------+
|Dev |
| |
+-------+
| Push
+--------+
|
V
+-------+ Push +-------+
|Live |<--------|Test |
|server | |server |
+-------+ +-------+
| +-------+ | +-------+
+--->|Live 1 | +--->|Test 1 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 2 | +--->|Test 2 |
| | | | | |
| +-------+ | +-------+
| |
| +-------+ | +-------+
+--->|Live 3 | +--->|Test 3 |
| | | |
+-------+ +-------+

基本上,这个想法是,我们作为开发人员所要做的就是,一旦开发达到稳定的水平,就发出 push 命令(不一定只是 hg push )进行测试服务器,然后它会从那里自动传播出去。然后,一旦测试完成,我们会将它从测试推送到 live(或者,如果更容易,我们可以从 dev 推送到 live),这也会传播到每个不同的实例。

如果我们可以相当容易地添加新的测试和实时实例,那就太好了(例如,如果 IP 存储在可以被脚本读取的数据库中,等等......)。

实现这一目标的最佳方法是什么?我知道 Mercurial 钩子(Hook)。也许是一个钩子(Hook)会运行的进程内脚本?我也看过 Fabric ,那会是一个不错的选择吗?

另外,每个端点需要什么样的支持软件?如果每台服务器上都存在 Mercurial 存储库,会不会最简单? SSH 访问是否有益? ETC...

最佳答案

我用 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 |
+-------+ +-------+
  • 我在每个 Web 服务器上都没有 repo;我只使用结构来部署必要的东西。
  • 我有一个包含所有部署逻辑
  • 的 fabfile.py(在 repo 中)
  • 要部署到的服务器 (IP) 集作为命令行参数提供给结构(它是 Jenkins 作业配置的一部分)
  • 我使用 Jenkins 共享工作区,因此我可以将提取和编译的任务与实际部署分开(这样我可以在必要时重新部署相同的代码)
  • 如果你能完成一个拉-编译-部署的 Jenkins 工作,你会更快乐。共享工作区的东西是我必须用于我的设置的黑客,并且有缺点。

  • 直接解决您的一些问题:
  • 在测试分支上工作的开发人员可以在闲暇时推送,并集体决定何时运行 Jenkins 作业以更新测试环境
  • 当测试满意时,将其 merge 到 stable 并运行 Jenkins 作业以更新实时环境
  • 添加一个新的 Web 框只需将另一个 IP 添加到用于调用结构的命令行(即在 Jenkins 作业的配置中)
  • 所有服务器都需要通过 Jenkins 框进行 ssh 访问
  • 关于deployment - 使用 Mercurial 在多台服务器上自动部署 Web,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6348070/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com