CI-持续集成(1)-软件工业“流水线”概述
CI-持续集成(1)-软件工业“流水线”概述
1 概述
持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误 [1]。
持续集成 相当于将传统工业的 流水线 作业的思想应用到现代的 软件工业 中来。不同之处在于,工业流水线 最终出来的是一个一个的产品复制体,但是 软件流水线 最终出来的是一代一代更新迭代的版本,但是共同点在于:整体产出的效率将极大地增加。
首先说CI解决了的问题:
- 小步伐的产品迭代
- 高频率的版本发布
- 随时随地的系统集成
- 稳定的系统演进线路图
这些都是 现代敏捷软件工程 理论中所要求达到的目标。
| [1] | 百度百科.持续集成.2015 |
2 开发模式变迁
传统开发协作模式的各种角色:
- 开发人员
-
- 从事软件产品的功能开发
- 编写单元测试脚本
- 简单的开发阶段的功能验证
- 测试人员
-
- 编写测试用例
- 集成阶段全面的功能验证
- 使用开发人员的交付物搭建测试环境
- 进行功能测试
- 一些自动化测试
- 发布人员
-
- 维护发布的相关配置
- 将通过测试的软件交付物按照流程发布到服务器上
- 运维人员
-
- 监控并保持服务器上的服务 7*24h 正常运行
而且在传统的过程中,存在如下特点:
- 除了开发人员外,其它角色基本上是 全手工 或者 大部分手工,事务处理效率低
- 开发和交流基本靠 口口相传 或者 邮件/QQ,沟通成本大
- 大部分从业人员总是做重复枯燥的工作,没有技术成长性
- 实践活动缺乏积累性,每次都是从头开始的相同的人工重复
而 持续集成 的工程思想引进之后,会发生如下变化:
- 开发人员
-
- 编写开发相关代码
- 测试人员
-
- 设计自动化测试用例
- 编写自动化测试相关代码
- 发布人员
-
- 设置自动化发布方案
- 编写自动化发布相关代码
- 运维人员
-
- 设置自动化运维方案
- 编写自动化运维相关代码
也就是说,所有的角色都要先是一个 开发人员 然后才是一个 XX领域人员。这种模式在目前IT智力密集的互联网行业特别明显,在一些主要的在线招聘平台里面可以看到大的互联网公司的招聘信息基本都是:
- 测试开发工程师
- 发布开发工程师
- 运维开发工程师
然后给的薪水待遇都是开发人员的待遇,甚至目前很多公司的岗位编制都是属于开发人员之列了。
在互联网行业里面,软件开发模式已经从 传统软件工程 向 敏捷软件工程 变迁,实现此思想的相应的方法也变迁,那么相应的从业人员的技能要求也要变迁。
换句话来说:IT行业的领域岗位,必须要掌握开发技能,如果不做出一些改变和提升,那么接下来的现象就是开发人员全线开始占领IT领域类的岗位了。
3 持续集成实践
持续集成的典型的工具就是开源系统 Jenkins。通过对 Jenkins 工具的应用的研究,绘制了一个全流水线的软件开发图,如下:

前期 CI 环境准备:
- 开发人员都开发好相应的代码
-
- 功能开发人员开发好产品特性代码
- 发布人员开发好自动化构建和发布代码
- 测试人员开发好自动化测试代码
使用 Jenkins 工具将这些工具链都组合起来
将流水线调试成功,所有环境搭建好
以上相当于是CI体系的建立阶段,是会有一定的技术力量投入,但是后面的反复迭代过程,则是来收回这些成本的。
后期迭代工作流:
开发人员向git服务器指定分支提交了新的代码
git服务器的 webhook 接收到提交事件后向 Jenkins 服务器指定接口发起请求,执行构建脚本
- Jenkins 服务器顺序执行构建脚本
-
- 从git服务器上面同步代码
- 执行自动构建脚本,生成交付物
- 自动搭建测试环境
Jenkins 执行自动化测试脚本
Jenkins 向 自动化发布 系统发起请求
自动化发布系统 进行自动灰度发布
触发 自动化测试系统
逐步全网发布
基本上,如上步骤可以全自动化无人值守完成。整个过程高效且不容易出错,对比手工式的生产模式,持续集成手段将极大地减少每次迭代的周期,保证整体项目可以按照极小的步伐和极高的频率进行稳步演进。
4 阶段小结
此文作为 持续集成 系列文章的开端,还有一些偏重于理论部分,以让大家对整体架构有所了解,同时也建立起现代的软件工程的整体观念。
后续的部分将侧重于环境搭建及相应的环境代码的开发的介绍,最后能够形成一套完整的能够提供生产力的 持续集成 系统。
| 作者: | Harmo哈莫 |
|---|---|
| 作者介绍: | https://zhengwh.github.io |
| 技术博客: | http://www.cnblogs.com/beer |
| Email: | dreamzsm@gmail.com |
| QQ: | 1295351490 |
| 时间: | 2015-11 |
| 版权声明: | 欢迎以学习交流为目的读者随意转载,但是请 【注明出处】 |
| 支持本文: | 如果文章对您有启发,可以点击博客右下角的按钮进行 【推荐】 |
CI-持续集成(1)-软件工业“流水线”概述的更多相关文章
- GitLab CI持续集成配置方案
目录 1. 持续集成介绍 1.1 概念 1.2 持续集成的好处 2. GitLab持续集成(CI) 2.1 简介 2.2 GitLab简单原理图 2.3 GitLab持续集成所需环境 2.4 需要了解 ...
- CI持续集成
CI持续集成 “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先 ...
- 我的TDD实践---CI持续集成
“我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...
- Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务
Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...
- 物联网架构成长之路(47)-利用GitLab实现CI持续集成
0.前言 前段时间,考虑到要练习部署一套CI/CD的系统.一开始考虑到Jenkins,随着这两天的了解,发现最新版的GitLab已经提供有CI/CD集成了.所以本次博客,干脆一步到位,直接用GitLa ...
- 02: CI(持续集成)/CD(持续交付/持续部署)
1.1 持续集成.持续交付 介绍 参考博客:https://www.cnblogs.com/cay83/p/8856231.html 1.传统交付 1. 传统软件的开发与交付的周期都很漫长,从需求 ...
- 【补充】Gitlab 部署 CI 持续集成
上一篇:<劈荆斩棘:Gitlab 部署 CI 持续集成> 上一篇所配置的.gitlab-ci.yml: stages: - build - test before_script: - ec ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- Ubuntu Docker 安装和配置 GitLab CI 持续集成
相关文章: Ubuntu Docker 简单安装 GitLab 劈荆斩棘:Gitlab 部署 CI 持续集成 目的:在 Ubuntu 服务器上,使用 Docker 安装和配置 GitLab Runne ...
随机推荐
- Python 实现隐藏文件夹、文件操作
Python通过win32api 可以实现操作文件夹文件操作,获取属性,修改属性 1.获取属性 通过win32api.GetFileAttributes 方法可以获取属性值 import win32c ...
- C++ 系列:设计模式研究
Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载,请保留此版权声明. -- ...
- 安装storm的一些很乱的笔记
下面是自己安装和测试storm的一些笔记,比较乱,后续有时间在整理一篇. storm jar all-my-code.jar com.storm.MyTopology arg1 arg2这个命令会运行 ...
- C#开发中常用方法1------日期计算
/// <summary>/// 获取指定日期,在为一年中为第几周/// </summary>/// <param name="dt">指定时间 ...
- 转:简单窗体振动-WaitForSingleObject,消息,winapi
http://www.cnblogs.com/Jekhn/archive/2012/08/25/2656656.html 线程,消息函数,SetWindowPos设置窗体位置 if WaitForSi ...
- 通过 listboxitem 查找属于listbox第几条数据
public override System.Windows.Style SelectStyle(object item, System.Windows.DependencyObject contai ...
- WP8解析JSON格式(使用Newtonsoft.Json包)
DOTA2 WebAPI请求返回的格式有两种,一种是XML,一种是JSON,默认是返回JSON格式. 这里举一个简单的解析JSON格式的例子(更多JSON操作): { "response&q ...
- mysql数据库表的自增主键号不规律,重新排列
mysql数据库表的自增主键ID乱了,需要重新排序. 原理:删除原有的自增ID,重新建立新的自增ID. 1.删除原有主键: ALTER TABLE `table_name` DROP `id`; 2. ...
- iOS 遇到的错误总结
1.[[[NSBundle mainBundle] loadNibNamed:@"UIFeedbackController" owner:nil options:nil] firs ...
- bootstrap之强调文本的类(带颜色)
bootstrap之强调文本的类(带颜色) <small>本行内容是在标签内</small><br> <strong>本行内容是在标签内</str ...