持续集成(Continuous integration,简称 CI)
开发中,我们经常遇到一些奇怪问题,比如:

本地可以编译成功的代码但是同事们更新代码后编译出错;
在项目有多个Target(目标)的时候,资源文件只添加到了当前的Target,另外一个Target这个时候是不能正常编译的;
写的工具类,被同事改了,或者自己有改动,很多地方用到了,怎么保证这个类的行为没有发生变化而影响到项目中的其它模块呢?
诸如此类。
引起各种奇怪问题的原因有很多,比如:

开发环境比较复杂不干净;
IDE的bug;
提交前有一些必要的检查需要做,但是开发时因为各种原因没做。
那么这些问题可否避免呢?当然是可以避免的,如果代码有新的改动,提交到版本库中的时候,有一个人帮我们检查必要事项,然后做做测试。这个当然是可以的,前提是老板同意专门招一个这样的人。

这些机械重复的事情我们可以找一个工具来帮我们完成,这个工具跑在一个专门的服务器上,该服务器环境相对干净、可以运行一些自动化操作(自动编译,代码检查,测试等环节)。那么这种工具,就是接下来讲的“持续集成”。

1.2、简单理解持续集成

为解决程序代码提交质量低,提交内容导致原有系统的bug,按时或按需自动编译版本,自动进行自动化测试。

1.3、详细理解持续集成

早集成、频繁的集成能够帮助项目开发者在早期发现项目风险和质量问题,越到后期发现的问题,解决的成本越高,从而有可能导致项目延期或者项目失败。

持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就是一个团队每天将集成多次,每次的集成都通过自动化的构建(包括编译,发布,自动化测试)来验证。简单来说,就是持续的定时的在多个团队成员的工作中进行集成,并且给予反馈。

1.4、持续集成的核心价值

持续集成中重复的编译发布等环节都是自动完成的,无需太多的人工干预,有利于减少重复过程以节省时间、费用和工作量;
持续集成保障了每个时间点上团队成员提交的代码是能成功集成的。换言之,任何时间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
持续集成还能利于软件本身的发展趋势,这点在需求不明确或是频繁性变更的情景中尤其重要,持续集成的质量能帮助团队进行有效决策,同时建立团队对开发产品的信心。
1.5、业界普遍认同的持续集成的原则

需要版本控制软件保障团队成员提交的代码不会导致集成失败。常用的版本控制软件有IBM Rational ClearCase、CVS、Subversion 等;
开发人员必须及时向版本控制库中提交代码,也必须经常性地从版本控制库中更新代码到本地;
需要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建可以被软件的修改来直接触发,也可以定时启动,如每半个小时构建一次;
必须保证构建的成功。如果构建失败,修复构建过程中的错误是优先级最高的工作。一旦修复,需要手动启动一次构建;
不更新构建失败的代码。
1.6、持续集成系统的组成

一个自动构建过程,包括自动编译、分发、部署和测试等。可帮助我们节省大量时间,完成这个过程的自动化后,在以后的开发过程中,我们需要做的,就是只是提交代码到版本库中,构建自动完成,基本不再需要人工干预。
一个代码存储库,即需要版本控制软件来保障代码的可维护性,同时作为构建过程的素材库。
一个持续集成服务器。最好有一台服务器单独作为持续集成服务器,一方面保证了环境的纯净,一方面不影响开发,而且持续集成服务器一般是随时准备开始构建的,所以一般也不关机。本文中介绍的 Jenkins 就是一个配置简单和使用方便的持续集成服务器。
1.7、集成操作步骤:首先要有统一的代码库,服务器不断从版本控制服务器上检查代码状态,看代码是否有更新。如果发现有代码更新,那么就从版本控制服务器下载最新的代码。等代码完全更新以后,调用自动化编译脚本,进行代码编译。然后运行所有的自动化测试,并且进行代码分析。如果其中任何一个步骤失败,就表示build失败,持续集成服务器会给予响应的反馈。每次代码提交之后,都会在持续集成服务器上触发一个定时构建,然后进行编译、部署。

1.8、Jenkins
提到 Jenkins 就不得不提另一个持续集成工具——Hudson , Hudson 由 Sun 公司开发,2010 年 Sun 公司被 Oracle 公司收购, oracle 公司声称对 hudson 拥有商标所有权。 Jenkins是从 Hudson 中分离出来的一个可扩展的持续集成引擎,并将继续走 Open Source 的道路。二者现在由不同的团队在维护。[2]
Jenkins 在持续集成领域市场份额中居于主导地位,被各种大小规模的团队用于用各种语言实现的各类项目中,语言包括.NET、Java、Ruby、Groovy、Grails、PHP 等。[5]

Jenkins是一个独立的基于Java开发的一种开源持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上。可用于自动化各种任务,如构建、测试和部署软件。[4]
Jenkins可以建立一个软件项目或工作运行的计划任务。 [2]

1.9、Jenkins特点[4]

开源免费。
跨平台,支持所有的平台。
安装配置超级简单。可以通过本机系统包Docker安装,甚至可以通过安装Java Runtime Environment的任何机器独立运行。[4]
易于使用。web形式的可视化的用户管理页面,简单、直观、友好,发布工作人员只需要通过简单的 UI 操作就可以替代原来繁琐的发布工作。[5]
master/slave支持分布式的build。
tips及时快速的帮助。
拥有良好的扩展性。已有的200多个开源插件可供使用,而且几乎每周会有新的开源插件贡献进来,这些插件的安装都十分快捷和简单。[5]
发展良好。Jenkins 开源社区的规模变得越来越大、活跃度也变得越来越高,发展速度非常快。[5]
1.10、Jenkins 的两个功能

不断地进行项目的构建/测试软件。
监控外部运行的作业: 如计划任务作业和 Qrocmail 的工作,即使是那些在远程机器上运行的计划任务。 Jenkins 生成这些日志并且很容易让你注意到错误的出现。实施监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性。[1]
1.11、jenkins的工作步骤

典型的工作流包括以下几个步骤:[7]

开发
提交
编译
测试
发布
有了Jenkins的帮助,除了第1步,后续的4步都是自动化完成的。具体的,当你完成了提交,Jenkins会自动运行你的编译脚本,编译成功后,再运行你的测试脚本,这一步成功后,接着它会帮你把新程序发布出去,特别的,在最后一步,你可以选择手动发布,或自动发布,毕竟发布这件事情,还是需要人为的确认一下比较好。

持续集成-jenkins相关推荐

  1. 自动化持续集成Jenkins

    自动化持续集成Jenkins 使用Jenkins配置自动化构建 http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结 ...

  2. 持续集成~Jenkins构建GitHub项目的实现

    有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...

  3. 持续集成 -- Jenkins + Slack 配置

    2017.12.13 始发于TesterHome 持续集成 Jenkins + Slack 配置 Why Slack? Slack支持很多平台和工具,接起来方便快捷:可在移动端/PC缎端同步查看:通知 ...

  4. 持续集成Jenkins+Gitlab

    2019独角兽企业重金招聘Python工程师标准>>> 持续集成Jenkins+Gitlab 请叫我大宝贝 0.1 2018.04.21 15:11* 字数 1203 阅读 760评 ...

  5. 持续集成Jenkins大法好

    持续集成Jenkins从初级到高级 1. 虚拟机安装 2. jenkins 安装 2.1 主要配置 2.2 安装Java环境 2.3 启动jenkins 2.4 开放8777端口供外网访问 2.5 外 ...

  6. 研发协同平台持续集成Jenkins作业设计演进

    源宝导读:Jenkins作为一个开源的持续集成工具,被大家广泛使用.本文将分享,Jenkins在明源云研发协同平台中的运用,以及在其作业设计方面的演进历程. 一.作业设计1.0 起初,为了尽快推出研发 ...

  7. 持续集成Jenkins

    一.简单慨念 持续集成(Continuous integration,简称 CI),随着近几年的发展,持续集成在项目中 得到了广泛的推广和应用. 软件集成就是用一种较好的方式,使多种软件的功能集成到一 ...

  8. 1.jenkins持续集成-jenkins安装

    1.为什们要使用jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目; 2.监控外部调用执行的工作. 2.安装jen ...

  9. 持续集成Jenkins+Gitlab实现持续集成

    用户说明 假设node3是程序员的个人电脑,在这台机器上编写代码 ip地址192.168.10.10 Git的安装部署及使用 git config --global user.name 'zzg' # ...

最新文章

  1. Android 安卓 四大组件
  2. 工信部制定VR行业标准-谋定研究:对话中国经济和信息化
  3. 为什么下拉框拉不下来_为什么体重降不下来?4个饮食方法降低热量摄入,让体重降下来...
  4. CDH6.x Solr7.x 集成 Ik 分词
  5. canvas 粒子效果 - 手残实践纪录
  6. 记一次YY笔试中卡住得知识点
  7. int CWnd::GetWindowTextW(LPTSTR,int) const”: 不能将参数 1 从“char [10]”转换为“LPTSTR”
  8. html更改弹窗样式(原创,转载需声明)
  9. 有一定的php基础,求推荐PHP框架,本人有一定PHP基础。
  10. mobile_net在spyder下载不下来
  11. 毕业论文编辑器软件制作经历与思考1
  12. Promise的三种状态
  13. STM32/CPU总线的由来和地址映射概念
  14. JS 单引号、双引号与反引号的区别
  15. H5页面上传图片控件
  16. GPU图形图像渲染原理
  17. 荔枝派Zero小白(一)
  18. AcWing 第69场周赛
  19. react简书项目学习笔记38如何拿到页面的输入值
  20. XCTF-ms0_01

热门文章

  1. 由粗模生细模 精灵4 RTK结合PhotoScan航线规划生成精细化模型
  2. 【理论】数据预处理流程
  3. Android手机屏幕投影到PC
  4. 关于屏幕尺寸的一些问题总结
  5. Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
  6. Ubuntu安装mwget
  7. Type interface com.mybatis.mapper.UserMapper is not known to the MapperRegistry. 解决方法
  8. 微普年薪10W版C语言教学视频
  9. mysql 5.5.9_CentOS5.5下安装Mysql 5.5.9GA(或Mysql 5.5.8GA)的经过和心得(笔记)
  10. 计算机专业教学论文,浅谈计算机专业教学论文