• 请不要在回答技术问题时复制粘贴 AI 生成的内容
dunhanson
V2EX  ›  程序员

jenkins 如何打增量包?

  •  
  •   dunhanson · Jul 18, 2018 · 7923 views
    This topic created in 2915 days ago, the information mentioned may be changed or developed.
    公司项目准备用 Jenkins 部署项目。

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

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

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

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

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

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

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