我因为想了解一下这方面的流程,所以请问下有经验大的 V 友
1
SpicyCat 2016-11-21 16:28:08 +08:00
你是说 Jenkins? 这用得很多啊。
|
2
misaka19000 OP @SpicyCat 想请问下具体的流程是怎么样的?比如我在源码中添加了一个新功能,这时候会怎么办?
|
3
Troevil 2016-11-21 16:32:28 +08:00
流程有很多种
举个栗子: 提交代码 --> 触发 svn/git(版本变化) --> 触发 jenkin 任务 --> 自动部署 |
4
misaka19000 OP @Troevil 集成成功才会自动部署吧?
那我想请问一下这个 jenkin 一般应该部署在一台测试服务器上还是本机,我认为应该是所有人都共用同一个 CI ,也就是部署在一台测试服务器上,不知道是否正确 |
5
Troevil 2016-11-21 16:42:24 +08:00
|
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 |
7
misaka19000 OP @Troevil 如果 jenkins 是部署在独立的服务器上,那么不是每一次的修改想要看到效果都必须 push 才行?这样不会降低开发效率吗?
|
8
misaka19000 OP @SpicyCat 是不是每一次的修改都需要 push 之后才能看到效果?
|
9
Troevil 2016-11-21 16:50:41 +08:00
@misaka19000 我只是举个例子... 触发的方式有很多,具体看 jenkins 的 job 配置
|
10
SilentDepth 2016-11-21 16:54:10 +08:00
@misaka19000 是啊,代码总得让 CI 服务能访问到才谈得上后面的事情。其实这是个开发模式的事,模块开发者的工作以提交代码作为一个单元任务的终点,代码的统一处理编译测试由自动化任务完成。当项目规模变大,手动流程会更慢而且容易出问题。如果项目很小那就没必要
|
11
misaka19000 OP @SilentDepth 可不可以这样:每个人在自己的本地会有一个环境,当个人所负责的模块完成并且测试完毕之后,在进行提交,这样既不会降低效率,也保证了效率。相当于 Git 的多次 commit ,一次 push 。
|
12
ihuotui 2016-11-21 17:07:42 +08:00
就是本地单元测试啊,提交到 jk 就是集成测试了,到测试人员的工作了。
|
13
SilentDepth 2016-11-21 17:13:30 +08:00
@misaka19000 你是说单元测试?这个当然没问题,和 CI 并不冲突。但你说把 CI 部署到本地那是不现实的,单元测试跟这个是两回事
|
14
misaka19000 OP @ihuotui 那我是不是可以认为 CI 只是提高了程序的稳定性,并没有提高提高开发的效率?
|
15
misaka19000 OP @SilentDepth 同 ls
|
16
SilentDepth 2016-11-21 17:18:58 +08:00
@misaka19000 你得分开来看。 CI 的意义更多体现在**大型项目**上,当项目规模上去了,手动流程的短板会越来越明显,比如编译就要跑个几小时,难道要开发或测试人员夜里值班吗。「程序的稳定性」或「开发的效率」是在「保证项目开发可以顺利进行」的前提下才谈得上呢,如果员工的精力在手动流程上耗费了一半,那还做什么产品呢是吧
|
17
misaka19000 OP @SilentDepth 我大概理解了持续集成了,想再请问下关于自动化部署是怎么做到的呢?
|
18
tomczhen 2016-11-21 17:52:37 +08:00
CI 的意义在于快速验证工程结果,符合敏捷开发的思想。 CI 的作用在于用机器代替人来完成各个环节,降低人为因素出错的概率——持续构建只是其中一部分。
无论项目大小, CI 都是有意义的,但是小项目不用盲目追求 CI 覆盖各个环节,自己平衡好投入产出比解决关键问题即可。 |
19
SilentDepth 2016-11-21 17:56:07 +08:00
@misaka19000 自动化部署就是把资源放到指定位置啊,把手动部署的过程自动化而已。比如说跑个 sh 或者 perl ?
|
20
tomczhen 2016-11-21 17:58:08 +08:00
@misaka19000 持续集成说白了就是 DRY 原则的工程体现——所有需要重复的都用自动化解决。持续交付牵扯到项目发布的方式,缩短发布周期,利用 CI 系统快速验证,然后做持续交付。这些都是要一步一步来的,而且项目管理方式的基因也要符合整个思想才能做到产出最大化。
|
21
Sharuru 2016-11-21 18:03:03 +08:00
把 Jenkins 啊这类 CI/CD 系统当成“按键精灵”就可以了,它能够自动完成一些以往需要开发人员手工进行的任务 :)
|
23
Ouyangan 2016-11-21 22:53:40 +08:00
关于怎么做 , 你就想着你手动是怎么做的,敲了哪些命令 , jenkins 支持直接写 shell 把这些写好 , 仓库推个 demo 上去 , 基本就完成了,没有你想的那么复杂 , 一步一步来 . 中文资料也多.
|
24
caixiexin 2016-11-22 10:55:34 +08:00 via Android
针对单个开发人员,一般来说先用单侧验证功能,没问题后再提交团队 ci 服务器,如果不经本地验证就提交的话,对其他人来说是灾难。
ps :说白了 Jenkins 就是自动化,如果需求简单的话,写个构建脚本关联到 git/svn 的钩子上,也能实现代码更新就自动构建,重新发布。 |