如何在多台服务器上实现Web应用程序的自动更新功能?

时间:2014-02-06 09:00:10

标签: python django auto-update

我需要了解如何实施以下内容   1.想要构建python应用程序,当新补丁可用时,它将自动更新   2.它将运行单元测试以检查补丁是否成功部署   3.如果在安装过程中出现任何故障,它将自动回滚

我不知道的是什么 A.不确定如何从源代码构建补丁
B.检查有关新更新的算法/标准流程可用 C.自动部署/回滚过程

有任何建议/链接吗?

1 个答案:

答案 0 :(得分:3)

我实现了一个服务器,它识别更改的源代码并提取新代码。它位于pythonanywhere.com this url,代码位于github。这个答案基于我在实现更新功能时的经验。

使用git对代码进行版本修改时,通常

  • 有一个可行的主分支或部署分支
  • 有一个开发分支,当所有测试都通过时,它会合并到master - > deploy分支中。

这样,您只需知道部署分支何时更改,以确定何时重新启动。应该在之前进行测试,以便不会出现停机。如果在部署系统上运行测试,则可能需要花费太多时间,或者无效代码会破坏系统。 因此部署分支可以工作,因为它之前已经过测试。

对于自动化测试,您可以使用像travis这样的连续集成服务器来下载代码并对其进行测试。可以询问是否运行特定提交。

当您在github上托管代码时,您可以指定推送http地址。我使用http://server/update无论何时更改存储库,github都会通知您的服务器。

然后,您可以通过从git中提取源代码来更新源代码,如果部署分支确实已更改,则可以重新启动应用程序。我不能在服务器上这样做,也许你可以。

<强>情境:

  1. 我将代码推送到github
  2. github向http://server/update
  3. 发送POST
  4. @post('/update') # bottle code
    def pull_own_source_code_and_restart():
        with inDirectory(server_repository):
            previous_commit = last_commit()
            text = git.pull()
            current_commit = last_commit()
        if previous_commit != current_commit:
            restart()
        return "Git says: {}".format(text)
    

    看看这两个文件:

  5. 版本控制系统通常会为每个版本执行“修补”。我用git。如果你现在不知道git,那就去学习吧!这是Pythons Django和git:http://www.opentechschool.org/material.html

    的研讨会材料

    现在让我知道这些信息是否足以在Django中实现这样的功能。当你开始工作时,请在这里发布你的代码。