前言:
知其然,知其所以然。相较于DevOps而言,CI/CD是一个相对具象的概念。在 IT 企业中,CI/CD的应用愈加广泛,成为推动软件研发活动的重要基础设施服务,同时推动 DevOps 模式的实际落地。
【文章的末尾给大家留下了大量的福利】
什么是 CI/CD
在实践 CI/CD 相关内容之前,我们有必要先认识下什么是 CI/CD。
一般传统或者狭义、普遍的 CI/CD,是指持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)。而更加广义、全面的理解,是指持续集成(Continuous Integration,CI)、持续测试(Continuous Testing,CT)、持续交付(Continuous Delivery,CD)和持续部署(Continuous Deployment,CD)四个方面。通常,一个软件开发的流水线如下图所示。
- Design:这一阶段完成软件开发的需求分析和设计。
- Develop:这一阶段完成软件开发的功能代码,一个最佳实践是采用测试驱动开发(TDD)的方法,测试代码和功能代码的编写同时进行。需要注意的是,在 Develop 阶段也会运行单元测试和其他小型测试。
- Test:这一阶段完成软件的各项大型或专项测试,比如界面测试、API 测试、性能测试和系统测试等。
- Release:这一阶段完成软件产品的发布,并交付给用户使用。
每日构建和每日测试
每日构建(Daily Build)在反应速度上没有持续集成快,它更强调的是通过每天(通常是晚上)自动部署当天开发所累积的代码,并结合每日测试(Daily Test)方法进行自动化测试,用于评估和衡量项目的进度。
持续集成特性决定了不可能在该阶段加入大量的测试,而每日构建则一般是在夜里执行的,那么这时就可以做更多的事情,比如代码质量检查、单元测试、测试覆盖率、集成测试等。每日构建会把当天所有的提交代码都一起做集成,而不像持续集成那样每提交一次代码就做一次集成。持续集成属于增量式构建,而每日构建则是一次完全构建。
每日构建是项目的心跳线。一般而言,通过每日构建我们可以看到项目的进度。比如今天有10个 Bug 的修复代码都提交了,晚上进行自动部署并通过了自动化测试,第二天上班时通过查看邮件我们就可以发现每日构建成功了,那么项目就又往前迈了一大步,开发工作又有了具体的进展。
具体的,每日构建就是在每天晚上自动化部署一个 OpenStack 环境(可以是all-in-one,也可以是 multi-node),然后运行大型或专项测试,比如 API 性能测试、API 接口测试、功能测试、部署测试等。
现在做测试,经常听到一个概念 持续集成 CI - Continuous Integration。
那什么是持续集成呢?相信大家看了不少文章之后依然是一脸懵逼。
这里呢,用我自己的理解谈一下,不正确的地方还请指正。
要说持续集成,首先要明白什么是集成。很多测试同学说到集成,就想到集成测试。
这里的集成主要是指代码的集成:
举例来说,比如当前迭代,开发时间为两周。项目开始后,开发人员会从代码管理工具(SVN 或 GIT)的主干代码上复制一份代码到自己本地电脑。然后在自己的本地电脑上进行开发,假设这个项目有三个开发人员,分别是 jim(狗蛋)、lily(翠花)、tom(大锤)。
好,现在三个开发分别在自己电脑上开发。开发任务完成后,一次性提交自己本地代码到代码管理工具的主干代码上。
这个过程就叫集成,也就是代码集成,将自己本地的代码集成到主干代码。此时发生了所谓的集成地狱。三位开发有可能会改到同一个代码文件、同一个方法,这样就会出现代码冲突。为了处理集成过程中的冲突,会花费非常多的时间、精力和成