文档章节

不可错过的「持续集成」进阶指南

风起云飞fir_im
 风起云飞fir_im
发布于 2016/10/28 11:11
字数 1508
阅读 106
收藏 5

随着软件部署的越来越成熟,敏捷、DevOps、CI/CD、Docker 等词语慢慢出现在工程师的视野中。对于持续集成,业界也没有一个通用的模式,每个团队可能习惯的方式和关注点都不一样。持续集成最关键的在于「持续」与「自动化」,这篇文章根据这两个关键点,将 CI 系统分为四个进阶过程,来看看你们的团队处在哪个阶段。

第一进阶 — 代码级别的集成,这是最初的持续集成

在最初的持续集成过程中,不依赖独立的持续集成工具,一般语言的 build 工具基本内置,比如 java 的maven/gradle/ant/ivy,c/c++ 的make /premake,同时也会加入代码风格检查,静态代码分析,单元测试调用,测试覆盖率检查等增强功能。接下来的交付准备环境、运行测试、备份旧版本、新版本打标签以及反馈机制等其他重复的事情全由手工完成 ,会花费很多时间。

第二进阶 — 集成 Workflow,基本实现了真正的持续集成

单一的编译-构建工具逐渐地不能满足产品快速交付的需求。

整个开发流程的重心从「代码级别的集成」转移到了更自动化地编译更完美的测试验证,致力于在最短的时间内发现问题,缩短开发周期,提高软件质量。比较常见的一个场景,某个团队先进行代码 Build,触发单元测试、集成测试,打包测试完毕后再自动部署到测试环境,循环往复,形成「编译-构建-测试-集成-部署到测试环境」的 Workflow.

flow.ci 是融入了 workflow 机制的持续集成(CI)服务,也可以理解为自动化流程平台,除了集成代码、编译、测试之外,还可以集成常用的工具、灵活自定义流程,帮助你们塑造一个更优秀智能的持续集成系统。

第三进阶 — 持续交付与部署,相对成熟的持续集成系统

在上个进阶中,产品是自动部署在测试环境,手动部署在生产环境。之所以这样选择,是因为产品在从需求到部署的过程中,会经历若干种不同的环境,例如 QA 环境、各种自动化测试运行环境、生产环境等。这些环境的搭建、配置、管理,在不同环境中的具体部署是比较复杂的。经常会遇到这么一种场景:明明在测试环境已经部署成功,但线上环境又出现部署故障。这种情况很可能是生产环境和测试环境的异构造成的。

这时候需要改进你的 CI 系统,建立标准化的环境部署顺序,在 Workflow 中增加部署预生产环境并进行灰度集成测试的流程,做好线上环境部署后的回归测试。到这里,已经真正做到了持续交付。

持续交付并不是指软件每一个改动都要尽快部署到产品环境中,它指的是任何的代码修改都可以在任何时候实施部署。而“持续部署”,即自动部署到生产环境中而无需手工干预:得到一个版本后,自动部署该版本到生产环境中。实践证明,相对独立快速地部署新功能是一个核心竞争力,可以减轻大规模功能变更的风险。

持续部署,是相对成熟的持续集成系统。

“开发人员提交代码,持续集成服务器获取代码,执行单元测试,根据测试结果决定是否部署到预演环境,如果成功部署到预演环境,进行整体验收测试,如果测试通过,自动部署到产品环境,全程自动化高效运转。”

第四进阶 — 并行多 workflow 集成以及个性化集成,基于 Docker 的持续集成

随着项目和团队规模增长,模块之间依赖关系变得复杂,如何确保代码质量的同时,保证代码构建的一致性和稳定性,成为一大挑战。Docker 可以方便地以“容器化”的方式部署,它就像集装箱一样,打包了所有依赖,在其他服务器上部署很容易,不至于换服务器后发现各种配置文件散落一地,这样就解决了编译时依赖和运行时依赖的问题。

还有一个问题,开发的分支越来越多,每个活跃分支都进行环境部署和集成测试,对持续集成环境的维护成本也就越高。Docker 的快速启动和镜像仓库是天生为 CI/CD 设计的,以前启动一个虚拟机需要几分钟,而启动 Docker 只需要几秒钟,让并行的持续集成才能成为可能。

目前,比较常见的基于 Docker 进行持续集成的流程如下:

  • 开发者提交代码
  • 触发镜像构建
  • 构建镜像上传至私有仓库
  • 镜像下载至执行机器
  • 镜像运行

PS:目前 flow.ci 还未支持 Docker. 下图以 Jenkins 作为 CI/CD 的测试运行引擎,在整个持续集成系统中使用 Docker 的流程图。

最后,开发团队面对越来越复杂的环境,需要结合团队的实际情况,定制出适合的方案,不断优化整个开发工作流,从而打造出一套更适合的持续集成系统。


【参考】

谈谈持续集成,持续交付,持续部署之间的区别

持续集成系统的演进之路

© 著作权归作者所有

风起云飞fir_im
粉丝 46
博文 136
码字总数 143328
作品 1
朝阳
私信 提问
fir.im Weekly - 除了新 MacBook Pro,近期值得关注的移动开发好资源

最近,最引人瞩目的莫过于 Apple 产品发布会,MacBook Pro 的更新可能是四年来变化最大的一版。除了更轻、更薄、性能更好、电力更足之外,最大的变化是加入了Touch Bar,被定义为 Mac 上的第...

风起云飞fir_im
2016/10/31
58
0
CI Weekly #4 | 不同规模的团队,如何做好持续集成?

CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成、持续交付,持续部署、自动化测试、 DevOps 等实践教程、工具与资源,以及一些工程师文化相关的程序员 Ti...

风起云飞fir_im
2016/11/30
6
0
革命性移动端开发框架-Flutter时间简史

说到Flutter,可能很多同学都会将它和这几个词关联起来:新兴的、移动端、动态化、跨平台、开发框架。 从去年开始Flutter的热度在不断地上升,那么它对很多同学造成了一个误区:认为Flutter...

JiaPengHui
03/09
0
0
开源图书--《全栈增长工程师指南》

依据在《Repractise简介篇:Web开发的七天里》中所说的 Web 开发的七个步骤而展开的电子书。当然它也是一个 APP,它一本关于如何成为全栈增长工程师的指南。 简介 我们都会学习,但是有时候我...

Phodal
2016/04/15
4.4K
1
进阶必看丨2017不可错过的十话技术专题(附20+精选专题清单)

回首共同度过的2017年,每一个脚印都那么清晰。几组成绩单,和大家分享:这一年,社区沉淀了100W+博文,300+场直播,有600+专家加入社区,用户互动产生的问答6w+…… 年尾的时候,7032位开发...

云迹九州
2018/01/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

零基础学画画应该从哪开始?

零基础学画画应该从哪开始?一种是从小有兴趣,喜欢涂鸦,喜欢将自己的创意和想法表现出来;另一种是长大后审美提高,开始对绘画艺术感兴趣,从而开始从零基础学起。 推荐大家可以搜一下:轻微...

设绘嗨
33分钟前
3
0
你编写的程序高效、优雅吗?阿里架构师教你编写高效优雅Java程序

面向对象 构造器参数太多怎么办? 用 builder 模式,用在 1、5 个或者 5 个以上的成员变量 2、参数不多,但是在未来,参数会增加 Builder 模式: 属于对象的创建模式,一般有 1. 抽象建造者:...

kx33389
37分钟前
3
0
PDF 文档操作Java类库Spire.PDF for Java v2.7.6发布上线!| 附下载

Spire.PDF for Java是一款专门对 PDF 文档进行操作的 Java 类库。该类库的主要功能在于帮助开发人员在 Java 应用程序(J2SE和J2EE)中生成 PDF 文档和操作现有 PDF 文档,并且运行环境无需安...

mnrssj
46分钟前
2
0
初探云原生应用管理(二): 为什么你必须尽快转向 Helm v3

在研究了一番“开放云原生应用中心(AppHub)”之后,程序员小张似乎已经明白了“云原生应用”到底是怎么一回事情。 “不就是 Helm 嘛!” 这不,小张这就准备把自己开发多年的“图书馆管理系...

zhaowei121
49分钟前
1
0
「工具」三分钟了解一款思维导图工具:XMind Zen

一款非常实用的商业思维导图软件,融合艺术与创造力。致力于高效的可视化思维,强调软件的跨平台使用,帮助用户提高生产效率。 相关信息 · 操作系统:macOS / Windows / Linux · 官方网站:...

极光推送
51分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部