V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
dunhanson
V2EX  ›  程序员

jenkins 如何打增量包?

  •  
  •   dunhanson · 2018-07-18 15:05:04 +08:00 · 7386 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。
    公司项目准备用 Jenkins 部署项目。

    但是目前的方案是用 jenkins 构建后,使用运维写的脚本,把 war 包上传到服务器然后解压,再把线上的配置覆盖一遍。
    感觉这么操作有点繁琐,大家有没有增量部署的方式?

    项目现在采用的是增量部署的方式,但是比较原始。是通过手动复制 git 日志中代码路径到 excel,然后通过遍写的小工具进行增量打包(工具根据代码路径从 tomcat 编译后的目录中提取需要的代码),生成增量压缩包,发给运维部署。

    大家公司的项目是怎么部署的?

    本人刚开始接触 jenkins,请大家多多指教。
    20 条回复    2018-07-19 09:40:17 +08:00
    qinxi
        1
    qinxi  
       2018-07-18 15:16:50 +08:00
    如果你想增量传输的话 rsync 支持 jar 的增量同步 https://www.v2ex.com/t/442933
    lfzyx
        2
    lfzyx  
       2018-07-18 15:22:52 +08:00
    从来不用增量包,用增量包你回滚到某个版本不麻烦么
    privil
        3
    privil  
       2018-07-18 15:27:16 +08:00
    @lfzyx #2 你增量出来新包的时候保存旧包 不就行了么
    pelloz
        4
    pelloz  
       2018-07-18 15:31:46 +08:00
    增量不好管理,我认为正确的做法是将配置和代码分开。无配置的代码每次都全量替换,然后如果需要再同步配置。
    privil
        5
    privil  
       2018-07-18 15:32:59 +08:00
    我现在是直接对 war 包用 rdiff 工具 做增量的,每次传输 war 包改动的部分,rdiff 工具是 rdiff-backup 里面带的工具
    rockyou12
        6
    rockyou12  
       2018-07-18 15:34:37 +08:00
    正确方法不应该是把你手动做的事自己写个 jenkins 的 lib 然后自动化(虽然暗坑不少……)?
    https://jenkins.io/doc/book/pipeline/shared-libraries/

    我司反正现在线上项目都是 docker ……所以也不用考虑增量部署了……
    privil
        7
    privil  
       2018-07-18 15:38:41 +08:00
    @rockyou12 #6 代码不放线上放本地,本地编译好,传输到线上……这就是增量的痛点啊。
    dunhanson
        8
    dunhanson  
    OP
       2018-07-18 15:44:28 +08:00
    @pelloz 每次改动很小话那不是很麻烦,比如就修改了一些页面、加了一些图片、js、css 文件等等,根本不需要重启应用服务器
    dunhanson
        9
    dunhanson  
    OP
       2018-07-18 15:45:35 +08:00
    @rockyou12 具体咋操作?每次把生成的项目镜像上传到线上部署?
    dunhanson
        10
    dunhanson  
    OP
       2018-07-18 15:46:12 +08:00
    @privil 是一个可行的思路
    dunhanson
        11
    dunhanson  
    OP
       2018-07-18 16:14:45 +08:00
    刚搜到一片文章比较支持全量部署这种方式
    https://www.cnblogs.com/datang6777/p/7290137.html
    rockyou12
        12
    rockyou12  
       2018-07-18 17:16:12 +08:00   ❤️ 1
    @dunhanson docker 的部署? docker 镜像会传到私有 docker 仓库,由于线上环境是基于 rancher 的 docker 集群,所以把镜像名和版本号填好,集群会自动拉取。

    而且由于在故障的时候需要自动迁移服务,所以也不可能考虑什么增量上传了

    docker 镜像本身也是分层结构的,所以基本上每次也只会拉新的 jar 包的量(但要对 jar 进行增量应该是不行,也许 google 的新项目 jib 可以做到)
    pelloz
        13
    pelloz  
       2018-07-18 17:38:21 +08:00   ❤️ 1
    @dunhanson 要完全规避这些问题的话,你应该将静态资源和你的应用代码分离,静态资源用 nginx 部署,tomcat 里面只负责后端接口。这是前后端分离的思路。
    xiaoheshang
        14
    xiaoheshang  
       2018-07-18 18:15:05 +08:00
    我们用的就是你说的每次都上传完整的 war 包,已经用了两年了,挺方便的。
    luosuosile
        15
    luosuosile  
       2018-07-18 18:24:29 +08:00
    @xiaoheshang 上传完整 war 包,老板不会跟你抱怨服务器流量贵吗?我老板用的亚马逊的,之前我也老直接丢 war 包。后来他总是有意无意提这月流量好贵。
    privil
        16
    privil  
       2018-07-18 18:40:14 +08:00 via Android
    @luosuosile 大部分人都是带宽计费啊,你们的 war 包是有多大
    ymj123
        17
    ymj123  
       2018-07-18 18:40:48 +08:00 via Android
    Jenkins 建任务的时候选 pipeline,可以自己写 groovy 调 shell 脚本调 python 脚本。感觉应该能满足你的需求?
    xiaoheshang
        18
    xiaoheshang  
       2018-07-18 19:44:35 +08:00
    @luosuosile 是啊,你们的 war 包很大嘛,公司用的带宽难道还有流量计费的?
    dunhanson
        19
    dunhanson  
    OP
       2018-07-19 09:39:08 +08:00
    @rockyou12 十分感谢
    dunhanson
        20
    dunhanson  
    OP
       2018-07-19 09:40:17 +08:00
    @ymj123 回头研究下的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5420 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 07:00 · PVG 15:00 · LAX 23:00 · JFK 02:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.