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

Dev*_*Dev 5 python django auto-update

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

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

有什么建议/链接吗?

Use*_*ser 4

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

当你使用git版本化你的代码时,你通常会

  • 有一个可以工作的主分支或部署分支
  • 有一个开发分支,当所有测试运行完毕后,该分支会合并到 master-->deploy 分支中。

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

对于自动化测试,您可以使用持续集成服务器(例如travis)来下载代码并进行测试。可以询问是否测试运行特定的提交。

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

然后,您可以通过从 git 拉取源代码来更新源代码,如果部署分支确实发生了更改,那么您可以重新启动应用程序。我无法在服务器中执行此操作,但也许你可以。

设想:

  1. 我将代码推送到github
  2. github 发送一个 POST 到http://server/update
  3. @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)
    
    Run Code Online (Sandbox Code Playgroud)

    看一下这两个文件:

版本控制系统通常会为每个版本进行“修补”。我用的是git。如果你现在还不知道 git,那就学习吧!以下是 Python Django 和 git 的研讨会材料:http ://www.opentechschool.org/material.html

现在让我看看这些信息是否足以在 Django 中实现这样的功能。当您让它工作时,请在此处发布您的代码。