浅谈持续集成

浅谈持续集成


1 持续集成是什么?

  1. 持续集成是一种软件开发实践,可以理解为软件开发的过程中的一种方法,并不是我们理解中的具体某种工具(例如Jenkins)
  2. 这个实践的内容主要指的是在开发过程中不断地将团队各个成员的成果集中到同一个主干。(例如:实践中的代码集成,每个人push到feature上的成果不断集成到master)
  3. 每次集成都通过自动化构建,构建的具体内容可能包括:编译、自动化测试、打包、自动部署

2 为什么需要持续集成?

从两方面去理解,一是集成,二是持续:

  • 集成:
    每个软件项目都可能是由多个模块、多个人员、甚至团队共同完成开发,软件产品交付前必定是要将各个部分整合在一起,集成不可避免。
  • 持续:
    软件项目周期很长,在项目过程中不断地进行集成,能够尽早、不断地发现项目中隐患,并能尽早改善。

3 怎么进行持续集成?自动化集成:Jenkins!

什么是Jenkins?

  • 一种持续集成的工具
  • 监控源代码库变化,自动执行编译构建、检查、测试、部署等任务,如下图
    - 图片
  1. 开发人员对本地拉取的项目源码进行提交,提交至版本库(Source Control Repository,GitLab,SVN等)
  2. Jenkins的轮询器(SCM)通过轮询版本库的版本变更,当检测到变更出发一新的构建任务,将版本库代码拉取至项目工作空间(Project Work Space)
  3. 触发构建任务(build),除了对工作空间的源码进行构建,也可以集成项目配置中心,获取构建目标所需的配置文件。
  4. 构建完成后可以继续执行代码检查(图中未画),以及自动化测试(Test)
  5. 构建最后一步是对工程进行打包,可以打成war文件,jar文件等
  6. build、test、package三个阶段可以输出构建过程的文件,诸如代码检查报告,单元测试覆盖率报告等,通过Jenkins的页面可以展示相应的报告结果(图形化的界面)
  7. 完成构建打包后,可以继续对构建结果进行发布或部署至对应的可发布库,可以是指定的服务器或统一的发布库。

引申: 其他持续集成工具

4 持续集成的内容

4.1 源代码集成

源代码集成也应该是持续集成的一部分,保证源代码库良好的集成规则是后续集成工作的前提。下面提供了一个实践中的代码集成方式:

  1. 源码库基本上遵循 生产(master)、测试(develop)、开发(feature)三个分支,分支对不同角色具备不同权限控制。
  2. 开发角色(develop)将自己的开发功能集成到feature,经由管理人员(master、owner)集成到develop,再集成到master 。
    feature:应由各个开发人员确保模块完成及时集成
    develop:应保持每周一次及以上的集成频率,确保不会有大的偏差
    master:在develop无问题的情况下集成,根据更新情况进行

4.2 编译构建

我们常见的编译构建工具(Java)有Ant、Maven,我们可以在Jenkins中集成构建工具去实现Jenkins的自动编译工作。Jenkins编译是代码集成的第一步保障,若编译失败Jenkins能够告诉你编译失败了,并且可以通过控制台信息查看编译记录。

我们在IDEA编译通过不代表Jenkins编译通过,比如漏提交部分修改、新增的文件,因此开发人员提交完代码后续还要跟踪Jenkins的构建结果。(做好Check)

4.3 自动化检查

我们可以在Jenkins中安装代码检查插件,对项目代码进行代码检查,提升代码质量,常见的代码检查工具又checkstyle、findbugs、PMD

工具目的检查项特点
CheckStyle检查java源文件
主要关注格式,是否与代码规范相符
Javadoc注释
命名规范
多余的Imports
Size度量,如过长的方法
缺少必要的空格
重复代码等
过于严格,但易修改
FindBugs检查.class文件,
查找Java ByteCode潜在问题
NullPoint空指针检查
没有合理关闭资源
字符串相同判断错(==,而不是equals)
比较严格
PMD检查java源文件中潜在的问题空try/catch/finally/switch语句块
未使用的局部变量、参数和private方法
空if/while语句
过于复杂的表达式
不必要的if语句等
复杂类
比较严格,不易修改

4.4 自动化测试

即进行单元测试、并输出单元测试覆盖率报告,集成结果是否合格的最有力保障,例如:

  • 通过异常的单元测试覆盖率报告,检查单元测试覆盖情况,判断是否有新功能的发布未有效通过测试
  • 通过异常的单元测试覆盖率报告,发现功能中引用的其他内容存在的问题
  • 发现误修改、误提交导致的单元测试异常;

4.5 自动化部署

对完成构建的发布包部署到指定容器下,不用人工手动拿包、放包,启动测试,完成集成的最后一步检查——应用的成功部署启动。
Jenkins中可采用的自动部署方式

  • Deploy to Container 插件:简单易配置、但无法满足特定需求
  • Publish over SSH 插件:实现复杂、但传输安全且可满足额外需求

延伸:针对不同配置需求的自动部署如何实现?
1 Apollo配置中心
2 考虑构建脚本中对配置文件的替换

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值