随着软件部署的越来越成熟,敏捷、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 的流程图。

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


【参考】

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

持续集成系统的演进之路

转载于:https://www.cnblogs.com/fir-im/p/6006947.html

不可错过的「持续集成」进阶指南相关推荐

  1. 机器学习岗面试题目汇总「持续更新」

    机器学习岗面试题目汇总「持续更新」 前情提要 交叉熵损失为什么要取log?

  2. 「Jenkins+Git+Maven+Shell+Tomcat持续集成」经典教程

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:mousycoder(极简小站) 来源地址:segmentf ...

  3. CI Weekly #21 | iOS 持续集成快速入门指南

    搭建 iOS 持续集成环境要多久?每个 iOSer 都有不同的答案.这次我们整理了 flow.ci 的 iOS 持续集成的相关文档和最佳实践,希望帮你更快地完成构建.更新文档见: flow.ci iO ...

  4. 「 右键管家」使用指南

    1.首页 2.管理菜单 3.文件类型:跟文件类型有关的右键菜单 4.增加菜单:增加一些常用功能 win10也有自带"复制路径"的功能,不需要通过「 右键管家」设置. 在文件或文件夹 ...

  5. 群晖使用Linux命令,群晖216++常用命令及dokcer使用笔记「持续更新」

    本文结合群晖NAS设备:216++,以下不在做说明 输入uname –a 回车,用 uname 命令能够看到 NAS 的 CPU 架构.指令集等内容如下: Linux DSM 3.10.105 #23 ...

  6. 「吓掉半条命」软件开源「持续更新」

    目录 前言: 介绍: 条款: 关于本应用商业用途及合作事宜: 关于商用处理: 关于代码开放原则: 附: 国庆: g: 1.0: 1.1: 1.2: 1.3: 1.4: 1.5: 1.6: 1.7: 1 ...

  7. 「CSDN交易中心」使用指南

    CSDN交易中心是什么? CSDN交易中心是一个火狐浏览器扩展,是在CSDN博客上互赞互评的交流平台.通过为他人点赞和评论,赚取金币:通过花费金币,得到他人的点赞和评论. 如何安装? 首先安装火狐浏览 ...

  8. 「IT人」职业生涯指南——附神级跳槽攻略图!

    每个人的职业生涯无非以下几种情况: 一.帮别人挣钱(打工) 不管你是刚入职的小兵,还是管人的经理,甚至是唬人的总监,都属于这一阶段. 通常程序员在这一阶段的职业发展分两条线,专家(技术)线和管理线.专 ...

  9. 「小程序」开发 指南(里面是小程序开发的各种论坛和文档)

    之前研究小程序,看到了一篇小程序的开发帖子,在这分享给大家. 什么是微信小程序? 微信之父张小龙是这样描述小程序的: 小程序是一个不需要下载安装就可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或 ...

最新文章

  1. emwin生成c文件格式的汉字库,GB2312编码,模拟器可用
  2. 数据中心柴油发电机组功率有哪几种?
  3. mysql group by 规则_MySQL 中关于 GROUP BY 的问题
  4. Nike Kyrie 1 Performance Review
  5. SpringBoot集成MyBatis-Plus框架
  6. java enum.isdefined_c# – Enum.IsDefined带有标记的枚举
  7. 剑指Offer 和为S的两个数字
  8. 数据交换-电路/报文/分组交换
  9. missing 1 required positional argument: ‘on_delete‘报错解决方案
  10. 模态框 (框架引入出现的问题)
  11. android4g主板,4G安卓核心板
  12. 由于 Exception.tostring()失败,因此无法打印异常字符串
  13. ps放大图片后变模糊怎么办,如何变清晰?
  14. Egret引擎游戏内存优化指南
  15. linux限制用户登录失败次数
  16. 案例:模拟京东快递单号查询 字体放大显示
  17. html文本打印lt;igt;字段,6-HTMLlt; formgt;表单标签和属性
  18. 第四章:Django特级篇
  19. 服务器修改host的ip,主机IP地址设置
  20. php 密码字符串限制,关于php:密码安全随机字符串函数

热门文章

  1. JZ46把数字翻译成字符串
  2. Flash务实主义——Loading
  3. Flex控制对主机网页中脚本的访问
  4. java d long_java 中long型数据的对比
  5. 不属于python数据类型的是_python基础3 ---python数据类型二
  6. python functools模块方法
  7. 【机器学习-西瓜书】八、集成学习:结合策略;多样性;总结
  8. Nginx配置静态资源
  9. [转]一千行MySQL学习笔记
  10. VMware安装Ubuntu 18.04虚拟机(镜像下载、硬盘分区、创建虚拟机、安装系统、桥接模式网络配置)