一、概念解释
CI/CD是指持续集成(Continuous Integration)和持续交付/持续部署(Continuous Delivery/Continuous Deployment)的缩写,是现代软件开发中的重要实践。它们旨在通过自动化和持续化的方式改善软件开发、测试和交付过程。
- CI(Continuous integration):持续集成,指的是频繁地将代码集成到主干
- CD(Continuous delivery):持续交付,指的是频繁地将软件的新版本交付给用户,以供评审
- CD(Continuous Deployment):持续部署,是持续交付的下一步,指的是代码通过评审后,自动部署到生产环境
- CT(Continuous Test):持续测试,保证上述3个流程质量的过程(通常也在CI中体现)
二、持续集成(CI)的好处
1、快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易
2、防止分支大幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成
三、持续集成(CI)的目的
让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成
四、为什么我们做不了(持续交付)CD
首先要说明的是,这里的持续交付是针对搭建CI/CD体系而言。
为什么我们做不了持续交付,由于实际工作中,正式环境搭建CI/CD体系的不一定是质量团队甚至不会让质量团队去做,而质量团队搭建的也只是(持续集成)CI部分,以保障自动化测试提效作用。
不能做CD其中的原因一是公司上线流程就没有将这部分交给质量团队做,第二个原因就是嵌入式软件发布方式与互联网软件发布方式不同,所以基于目前的这种纯软件流程的(持续交付)CD方式不能实现我们产品的CD。
五、常见CI/CD工具
Jenkins、Travis CI、Circle CI、TeamCity、GitHub Actions等等
-
Jenkins
- 优点:开源、可定制性强、拥有丰富的插件生态系统、支持大规模部署
- 缺点:需要较多的配置和管理、UI设计相对陈旧
-
Travis CI
- 优点:易于使用、针对GitHub仓库提供无缝集成、支持Linux和macOS环境
- 缺点:免费版功能受限、不适用于私有项目
-
CircleCI
- 优点:云端托管、易于配置、支持Docker构建、适用于小型团队
- 缺点:收费较高、限制较多
-
GitLab CI/CD
- 优点:集成于GitLab仓库、开源版本功能完备、支持自动DevOps流程
- 缺点:企业版收费较高、不适用于非GitLab托管的项目
-
TeamCity
- 优点:功能强大、易于集成、支持多种构建工具
- 缺点:商业软件,需要购买许可证
-
GitHub Actions
- 优点:集成于GitHub、免费版功能完备、便于与GitHub仓库集成
- 缺点:新产品,部分功能可能尚未成熟
选择CI/CD工具时,从几点出发:
- 易于安装、使用
- 安装位置选择:云、本地、虚拟环境(k8s、docker)
- 最重要的一点,是否开源
选择Jenkins是满足了开源、本地部署、易于安装这几点条件的
六、持续集成(CI)的最小流程
七、可扩展环节
持续集成本质是流程自动化的体现,所以都是基于现有的手工流程修改完善出来的,完善的流程都是建立在上述最小流程之上的,通常扩展环节出现在三个位置:新建任务、构建前操作、构建后操作。
常见扩展环节有:流程定时任务化、任务串联(多个子任务合并成一个大任务)、增加构建前的代码静态扫描、代码审计、构建后的自动化测试、关联构建后的问题记录、bug上报等等。
实现这些扩展环节,离不开Jenkins提供的大量的插件,如代码静态扫描使用的Sonar、自动化测试报告查看用的Html Publisher、邮件发送用的Email Extension等等上千种。
八、几种搭建方法
1、本机搭建:将安装包下载至Windows电脑,进行启动,流程中所有环节均在本机执行
优点:
- 搭建过程相对简单,能够保证最基本使用
- 不需要申请服务器资源
缺点:
- 需要多端维护CI环境,一旦流程发生变换,使用端都需要进行修改,服务端部署则是一端维护,多端使用
- 不利于环境统一:编译环境、运行环境、测试执行环境
- 本地搭建,使用者想要接入这套系统需要每人搭建一套环境
- 需要保证电脑无休息运行
2、服务端搭建:将Jenkins安装在一个服务器上,作为Master节点,代码管理、编译、运行、测试执行分别按需扩展节点(Jenkins Slave),节点机可以是同Master节点相同的服务器,也可以是网络互通的Windows机器。
优点:
- 符合标准持续集成环境搭建方案
- 可以一端维护,多端使用
- 节点可扩展性高
缺点:
- 需要申请服务器资源
- 测试端需要和硬件连接的部分,只能使用Windows电脑作为Jenkins执行节点,需要考虑网络互通问题
3、局域网搭建:同搭建方式2,只是所有节点均为Windows电脑,需要保证所有电脑网络互通。
优点:
- 结合了搭建方式1和2的所有优点
- 网络互通,Jenkins节点可以灵活地使用Windows,对于需要对接硬件测试的可以无缝衔接
3)Jenkins Master在Windows、Windows上的虚拟机、服务器上均能搭建
缺点:
Jenkins Master在Windows搭建时,需保证电脑无休息运行
九、实例展示
1、任务列表展示
2、自动化测试结果概览展示
3、任务构建流程-基础配置项展示
4、任务构建流程-源码管理配置项展示
5、任务构建流程-构建前操作配置项展示
6、任务构建流程-构建配置项展示
7、任务构建流程-构建后操作配置项展示
CI/CD的实施可以带来以下好处:
- 更快的交付周期:通过自动化流程,加速软件的构建、测试和部署过程,从而更快地交付软件。
- 更高的质量:通过频繁的集成、自动化测试和部署,降低软件缺陷的风险。
- 更好的团队协作:减少手动操作,增强团队之间的沟通和合作。
- 更好的反馈机制:及时发现和解决问题,提高开发人员对代码质量和系统状态的认识。
总之,CI/CD是一种通过自动化、持续化和频繁化的方式来改善软件开发、测试和交付流程的实践,有助于提高软件交付的效率和质量。