richiefans
V2EX  ›  Ruby

问一下关于Capistrano自动部署

  •  
  •   richiefans · Nov 25, 2013 · 5466 views
    This topic created in 4582 days ago, the information mentioned may be changed or developed.
    目前想做一个自动部署的方案
    目前代码托管在内部的git server,master分支作为发布分支的话

    由于生产环境比较简单 基于php的applaction 就一台server 之前采用的都是采用sftp手动上传的方式来覆盖每次更新的文件

    人为操作还是会出现一些问题,比如遗漏更新文件等~

    了解了一下Capistrano 可以根据git repo来进行自动化部署

    那么这类工具是增量么 [每次只更新create or change files] ?还是pull之后 完整repo的cp~?

    还有更好的方案么?之前考虑过 基于gitlog生成一个updatefiles list 然后用脚本scp过去~
    Supplement 1  ·  Nov 26, 2013
    是这样,目前想实现的是增量部署
    考虑是这样
    server上面保存一下当前的repo 版本号 比如repoversion.txt
    然后在需要部署的时候
    用最新的master分支 比较server上面的repoversion得到一个filelist(包含新增的文件、修改的文件、和删除的文件)
    然后用脚本来对这个filelist 进行增量部署 该删的删、该覆盖的覆盖~
    目前卡在了 如何获得两次repoversion之间的 文件差异list上~
    求助啊
    4 replies    1970-01-01 08:00:00 +08:00
    levey
        1
    levey  
       Nov 25, 2013   ❤️ 1
    cap 每次部署是 clone 代码到新的目录。
    kaichen
        2
    kaichen  
    PRO
       Nov 25, 2013   ❤️ 1
    在Capistrano 2中的Git代码更新策略是可以配置的,到了Capistrano 3后只保留了一个大家用的最多的做法。那就是维护一份Git repo的Clone,每次发布一次release的时候从这份Clone里拷贝一份出来并以时间戳命名。

    也就是说是你理解的第二种方式,通过这种方法只要你代码都提交上repo中那么就不会有遗漏,并且还能进行rollback。
    richiefans
        3
    richiefans  
    OP
       Nov 26, 2013
    @levey @kaichen
    谢谢,已发出感谢,可能Capistrano还不太适合目前的场景

    目前想实现的是增量部署

    考虑是这样

    server上面保存一下当前的repo 版本号 比如repoversion.txt

    然后在需要部署的时候

    用最新的master分支 比较server上面的repoversion得到一个filelist(包含新增的文件、修改的文件、和删除的文件)

    然后用脚本来对这个filelist 进行增量部署 该删的删、该覆盖的覆盖~

    目前卡在了 如何获得两次repoversion之间的 文件差异list上~

    求助啊
    Lax
        4
    Lax  
       Dec 6, 2013   ❤️ 1
    "用最新的master分支 比较server上面的repoversion得到一个filelist(包含新增的文件、修改的文件、和删除的文件)"

    楼主可以试试 git format-patch && git apply
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1114 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:10 · PVG 02:10 · LAX 11:10 · JFK 14:10
    ♥ Do have faith in what you're doing.