V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yongzhong
V2EX  ›  职场话题

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

  •  
  •   yongzhong · 2016-07-26 12:26:09 +08:00 · 5629 次点击
    这是一个创建于 3079 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用起来感觉如何,有什么比较让你惊喜的功能?或者是值得吐槽的地方
    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   ·   实用小工具   ·   1078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 81ms · UTC 22:54 · PVG 06:54 · LAX 14:54 · JFK 17:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.