V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
misaka19000
V2EX  ›  问与答

你们在平时开发的时候会用到持续集成吗,是怎么部署的?

  •  
  •   misaka19000 · 2016-11-21 16:10:21 +08:00 · 1953 次点击
    这是一个创建于 2926 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我因为想了解一下这方面的流程,所以请问下有经验大的 V 友

    第 1 条附言  ·  2016-11-21 17:59:53 +08:00
    关于持续集成我已经理解了,想再请问下各位关于 Java 的 Web 应用的自动化部署大家平时一般是怎么做的?
    24 条回复    2016-11-22 10:55:34 +08:00
    SpicyCat
        1
    SpicyCat  
       2016-11-21 16:28:08 +08:00
    你是说 Jenkins? 这用得很多啊。
    misaka19000
        2
    misaka19000  
    OP
       2016-11-21 16:30:44 +08:00
    @SpicyCat 想请问下具体的流程是怎么样的?比如我在源码中添加了一个新功能,这时候会怎么办?
    Troevil
        3
    Troevil  
       2016-11-21 16:32:28 +08:00
    流程有很多种
    举个栗子: 提交代码 --> 触发 svn/git(版本变化) --> 触发 jenkin 任务 --> 自动部署
    misaka19000
        4
    misaka19000  
    OP
       2016-11-21 16:35:57 +08:00
    @Troevil 集成成功才会自动部署吧?
    那我想请问一下这个 jenkin 一般应该部署在一台测试服务器上还是本机,我认为应该是所有人都共用同一个 CI ,也就是部署在一台测试服务器上,不知道是否正确
    Troevil
        5
    Troevil  
       2016-11-21 16:42:24 +08:00
    @misaka19000 额 更正一下 是 jenkins
    jenkins 一般是部署到单独的服务器 , 可以公用或独立,看需求了
    一般是公用,部署到一台服务器上的
    SpicyCat
        6
    SpicyCat  
       2016-11-21 16:47:24 +08:00
    @misaka19000 CI 哪有一人一个的,一般一个团队一个 CI ,像 Jenkins 可以创建多个 job ,对应多个 project 。
    流程嘛,最简单的,你提交了新功能,触发了之前定义好的 jenkins job , 这个 job 就开始运行,一个 job 本质上就是个脚本,一般就是用来 build, run test 什么的。 job 运行完后,可以配置 post action, 一般就是配置成失败了发送邮件。
    如果你们用 Jenkins, 那需要配置的地方很多,并不能开箱即用。
    如果你们用 gitlab, 并且项目不是很大,可以试试 Gitlab CI
    misaka19000
        7
    misaka19000  
    OP
       2016-11-21 16:47:28 +08:00
    @Troevil 如果 jenkins 是部署在独立的服务器上,那么不是每一次的修改想要看到效果都必须 push 才行?这样不会降低开发效率吗?
    misaka19000
        8
    misaka19000  
    OP
       2016-11-21 16:48:51 +08:00
    @SpicyCat 是不是每一次的修改都需要 push 之后才能看到效果?
    Troevil
        9
    Troevil  
       2016-11-21 16:50:41 +08:00
    @misaka19000 我只是举个例子... 触发的方式有很多,具体看 jenkins 的 job 配置
    SilentDepth
        10
    SilentDepth  
       2016-11-21 16:54:10 +08:00
    @misaka19000 是啊,代码总得让 CI 服务能访问到才谈得上后面的事情。其实这是个开发模式的事,模块开发者的工作以提交代码作为一个单元任务的终点,代码的统一处理编译测试由自动化任务完成。当项目规模变大,手动流程会更慢而且容易出问题。如果项目很小那就没必要
    misaka19000
        11
    misaka19000  
    OP
       2016-11-21 16:57:22 +08:00
    @SilentDepth 可不可以这样:每个人在自己的本地会有一个环境,当个人所负责的模块完成并且测试完毕之后,在进行提交,这样既不会降低效率,也保证了效率。相当于 Git 的多次 commit ,一次 push 。
    ihuotui
        12
    ihuotui  
       2016-11-21 17:07:42 +08:00
    就是本地单元测试啊,提交到 jk 就是集成测试了,到测试人员的工作了。
    SilentDepth
        13
    SilentDepth  
       2016-11-21 17:13:30 +08:00
    @misaka19000 你是说单元测试?这个当然没问题,和 CI 并不冲突。但你说把 CI 部署到本地那是不现实的,单元测试跟这个是两回事
    misaka19000
        14
    misaka19000  
    OP
       2016-11-21 17:14:22 +08:00
    @ihuotui 那我是不是可以认为 CI 只是提高了程序的稳定性,并没有提高提高开发的效率?
    misaka19000
        15
    misaka19000  
    OP
       2016-11-21 17:14:46 +08:00
    @SilentDepth 同 ls
    SilentDepth
        16
    SilentDepth  
       2016-11-21 17:18:58 +08:00
    @misaka19000 你得分开来看。 CI 的意义更多体现在**大型项目**上,当项目规模上去了,手动流程的短板会越来越明显,比如编译就要跑个几小时,难道要开发或测试人员夜里值班吗。「程序的稳定性」或「开发的效率」是在「保证项目开发可以顺利进行」的前提下才谈得上呢,如果员工的精力在手动流程上耗费了一半,那还做什么产品呢是吧
    misaka19000
        17
    misaka19000  
    OP
       2016-11-21 17:41:28 +08:00 via Android
    @SilentDepth 我大概理解了持续集成了,想再请问下关于自动化部署是怎么做到的呢?
    tomczhen
        18
    tomczhen  
       2016-11-21 17:52:37 +08:00
    CI 的意义在于快速验证工程结果,符合敏捷开发的思想。 CI 的作用在于用机器代替人来完成各个环节,降低人为因素出错的概率——持续构建只是其中一部分。

    无论项目大小, CI 都是有意义的,但是小项目不用盲目追求 CI 覆盖各个环节,自己平衡好投入产出比解决关键问题即可。
    SilentDepth
        19
    SilentDepth  
       2016-11-21 17:56:07 +08:00
    @misaka19000 自动化部署就是把资源放到指定位置啊,把手动部署的过程自动化而已。比如说跑个 sh 或者 perl ?
    tomczhen
        20
    tomczhen  
       2016-11-21 17:58:08 +08:00
    @misaka19000 持续集成说白了就是 DRY 原则的工程体现——所有需要重复的都用自动化解决。持续交付牵扯到项目发布的方式,缩短发布周期,利用 CI 系统快速验证,然后做持续交付。这些都是要一步一步来的,而且项目管理方式的基因也要符合整个思想才能做到产出最大化。
    Sharuru
        21
    Sharuru  
       2016-11-21 18:03:03 +08:00
    把 Jenkins 啊这类 CI/CD 系统当成“按键精灵”就可以了,它能够自动完成一些以往需要开发人员手工进行的任务 :)
    ihuotui
        22
    ihuotui  
       2016-11-21 22:00:59 +08:00
    @Sharuru 自动化,减少人工时间,提高效率,减少人工错误,提高效率,加快测试,提高效率
    Ouyangan
        23
    Ouyangan  
       2016-11-21 22:53:40 +08:00
    关于怎么做 , 你就想着你手动是怎么做的,敲了哪些命令 , jenkins 支持直接写 shell 把这些写好 , 仓库推个 demo 上去 , 基本就完成了,没有你想的那么复杂 , 一步一步来 . 中文资料也多.
    caixiexin
        24
    caixiexin  
       2016-11-22 10:55:34 +08:00 via Android
    针对单个开发人员,一般来说先用单侧验证功能,没问题后再提交团队 ci 服务器,如果不经本地验证就提交的话,对其他人来说是灾难。
    ps :说白了 Jenkins 就是自动化,如果需求简单的话,写个构建脚本关联到 git/svn 的钩子上,也能实现代码更新就自动构建,重新发布。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:27 · PVG 10:27 · LAX 18:27 · JFK 21:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.