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

2016-11-21 16:10:21 +08:00
 misaka19000

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

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

无论项目大小, CI 都是有意义的,但是小项目不用盲目追求 CI 覆盖各个环节,自己平衡好投入产出比解决关键问题即可。
SilentDepth
2016-11-21 17:56:07 +08:00
@misaka19000 自动化部署就是把资源放到指定位置啊,把手动部署的过程自动化而已。比如说跑个 sh 或者 perl ?
tomczhen
2016-11-21 17:58:08 +08:00
@misaka19000 持续集成说白了就是 DRY 原则的工程体现——所有需要重复的都用自动化解决。持续交付牵扯到项目发布的方式,缩短发布周期,利用 CI 系统快速验证,然后做持续交付。这些都是要一步一步来的,而且项目管理方式的基因也要符合整个思想才能做到产出最大化。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/322118

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX