你们的公司都有发布系统吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yongzhong
V2EX    职场话题

你们的公司都有发布系统吗

  •  
  •   yongzhong 2016-07-26 12:26:09 +08:00 6042 次点击
    这是一个创建于 3367 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用起来感觉如何,有什么比较让你惊喜的功能?或者是值得吐槽的地方
    35 条回复    2016-07-27 13:46:52 +08:00
    hyggyh
        1
    hyggyh  
       2016-07-26 12:53:13 +08:00
    完全木有。。老大们都觉得自己手工发布比较靠谱
    cloudzhou
        2
    cloudzhou  
       2016-07-26 13:45:41 +08:00
    我以前开发过,一键发布,确实非常有必要,尤其是 10+ 机器的。
    yongzhong
        3
    yongzhong  
    OP
       2016-07-26 14:03:18 +08:00
    @hyggyh 数量大起来还是需要上系统啊

    @cloudzhou 你们的应用都是些什么语言的?打包发布过程中不会有什么问题吗
    cloudzhou
        4
    cloudzhou  
       2016-07-26 14:07:50 +08:00
    @yongzhong Java ,没什么问题,一台作为发布机器,然后通过 rsync 同步 war 包,做好校验,脚本控制应用重启,监控,几个脚本就搞定了。
    这是一件一劳永逸的事请,值得用心去做。
    baby4free
        5
    baby4free  
       2016-07-26 14:09:42 +08:00
    自动化构建与发布是非常必要的 节省自己的时间
    MrJing1992
        6
    MrJing1992  
       2016-07-26 14:17:24 +08:00
    简单点,部署工具: http://www.walle-web.io/
    复杂点,持续集成系统: https://jenkins.io/index.html
    yongzhong
        7
    yongzhong  
    OP
       2016-07-26 14:18:55 +08:00
    @cloudzhou rsync 有什么优势吗,从哪里同步 war 包,本地还是 jenkins?我们是基于 git 的,涵盖自动 pull,配置项,maven 编译,认证后合并 push 等,操作比较繁琐.基于 git 和 Maven 过程中总会被各种因素影响.开发有意见,我们也烦.考虑以后上 docker
    Infernalzero
        8
    Infernalzero  
       2016-07-26 15:12:33 +08:00
    自己公司开发了一套,挺蛋疼的,每次还得提交发布请求填写发布哪些文件,然后打个包 maven 编译一下 gulp 跑一下就几分钟去了,还有什么紧急发布功能搞得我真心蛋碎,要不是因为一天发布一次到正式环境,真心不想搞这套系统。
    cloudzhou
        9
    cloudzhou  
       2016-07-26 15:18:39 +08:00
    @yongzhong 开始的时候并不需要一个庞大的系统,自己用脚本写就可以了。
    简单的说就是几个功能:
    1 发布机器编译成 War 包
    2 rsync 到其他几台机器
    3 命令控制机器重启

    前台挂 nginx 做自动负载均衡,做到发布期间网站可用。
    zpvip
        10
    zpvip  
       2016-07-26 15:29:00 +08:00
    yxaaa123
        11
    yxaaa123  
       2016-07-26 16:35:27 +08:00
    自己装了一个 Jenkins
    defunct9
        12
    defunct9  
       2016-07-26 16:39:15 +08:00
    蛋疼,用 saltstack 写脚本发布
    fanTasy
        13
    fanTasy  
       2016-07-26 16:57:40 +08:00
    有,但是很难用 && 必须用……
    cxbig
        14
    cxbig  
       2016-07-26 17:00:00 +08:00
    capistrano+phpci
    lightening
        15
    lightening  
       2016-07-26 17:10:00 +08:00
    GitHub 合并到 Master 前会过 CI 。
    用 Ansible provision 服务器们,然后 Capistrano 部署。 Ruby on Rails 项目。
    开发 /测试环境 dependency 都在 docker 里,本机上只需要跑 App 本身。
    strwei
        16
    strwei  
       2016-07-26 17:11:45 +08:00
    我们的 gogs+webhooks
    CarlWangCn
        17
    CarlWangCn  
       2016-07-26 19:15:42 +08:00
    有, 必须有
    hantsy
        18
    hantsy  
       2016-07-26 21:25:44 +08:00
    Jenkins , Circle 都可以啊。。。
    遵照 Github Flow ,各 Fork PR 的 Push 就集成测试, Merge 到 Upstream Master 执行部署。
    fxxkgw
        19
    fxxkgw  
       2016-07-26 22:42:33 +08:00
    django 的框架 然后把发布消息写到 rabbitmq 上 通过 celery 取任务后 paramiko 工具把包推到目标服务器 执行发布脚本获取返回值分析结果。。
    chocotan
        20
    chocotan  
       2016-07-26 22:57:31 +08:00
    发布多了被批评了,以后不敢用了
    scarlex
        21
    scarlex  
       2016-07-26 23:32:32 +08:00
    我们用 GitLab CI
    zlg5
        22
    zlg5  
       2016-07-27 02:51:25 +08:00
    Apollo, Pipeline
    wolfy123
        23
    wolfy123  
       2016-07-27 07:42:21 +08:00
    基于 git 的话,用 gitlab 就好了,挺好用的
    9hills
        24
    9hills  
       2016-07-27 08:33:45 +08:00 via iPhone
    持续集成系统,部署系统。是两个不同的东西,虽然在机器很少时,前者能够替代后者一部分功能。

    持续集成 jenkins 就不错,部署么很多种,比较复杂。
    takashiki
        25
    takashiki  
       2016-07-27 09:05:33 +08:00
    @MrJing1992 最近公司在用 walle ,感觉很不理解为什么一个用 yii2 开发的部署系统对 yii2 这么不友好,每次新项目上线都得配好久,新手得两天左右,总结下来坑如下:

    1.各种文件需要新版发布时保持原样,就得 cp 来 cp 去,尤其使用 yii2-advanced 的人应该深有体会

    2.由于使用了软链,所以开了 opcache 的话新版上线需要 reload php-fpm ,或者其他方式重置 opcache ,原因是 opcache 解析的文件路径是 realpath

    3.如果使用了 git subtree 之类的需要自己在 composer 里添加 autoload 规则的东西,每次新版上线必须 composer dump-autoload ,具体原理不明。

    ……好像还有其他的来着
    takashiki
        26
    takashiki  
       2016-07-27 09:07:19 +08:00
    @takashiki 第三点多了一个句号……
    tomoya92
        27
    tomoya92  
       2016-07-27 09:18:32 +08:00
    没人做 docker ,然后部署多台服务器吗?
    MrJing1992
        28
    MrJing1992  
       2016-07-27 09:47:37 +08:00   1
    @takashiki
    部署还是挺简单的,因为自带了检测功能;
    opcache 这个有办法, http://gordalina.github.io/cachetool/
    composer dump-autoload 这个应该是你加了一些类,但是 classmap 是旧的,所有要执行。其实生产环境提倡使用 composer dump-autoload -o ,生成 classmap 比直接使用 PSR0/4 是有性能上的提升的。
    MrJing1992
        29
    MrJing1992  
       2016-07-27 09:51:21 +08:00
    takashiki
        30
    takashiki  
       2016-07-27 10:12:18 +08:00
    @MrJing1992 不错,收藏了,感谢
    yongzhong
        31
    yongzhong  
    OP
       2016-07-27 10:16:13 +08:00
    @fxxkgw 差不多也是这样的,只是设想出来的需求更大更全
    @defunct9 用 saltstack 还不如 fabric 直接撸脚本吧
    defunct9
        32
    defunct9  
       2016-07-27 10:43:33 +08:00
    @yongzhong 那不如 ansible ,连客户端都不用装。
    Lenbo
        33
    Lenbo  
       2016-07-27 10:51:40 +08:00
    @zpvip 赞 capistrano ,我们的快速发布基于此做的。自动构建利用 webhook 自己来实现
    takashiki
        34
    takashiki  
       2016-07-27 12:33:38 +08:00
    @MrJing1992 对了,话说你说的自动检测是什么样的功能,能自动检测项目内哪些文件发布新版本时需保留么
    wesley
        35
    wesley  
       2016-07-27 13:46:52 +08:00
    @takashiki 可以指定 opcache 的保存目录,每次发布时清空该目录
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4335 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 04:09 PVG 12:09 LAX 21:09 JFK 00:09
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86