2022. 星期 :
介绍
CI/CD 既可能仅指持续集成和持续交付构成的关联环节,也可以指持续集成、持续交付和持续部署这三项构成的关联环节。更为复杂的是,有时“持续交付”也包含了持续部署流程。
归根结底,我们没必要纠结于这些语义,您只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。因案例而异,该术语的具体含义取决于 CI/CD 管道的自动化程度。许多企业最开始先添加 CI,然后逐步实现交付和部署的自动化(例如作为云原生应用的一部分)。
来源:
定义
CI / CD的采用改变了开发人员和测试人员如何发布软件。
最初是瀑布模型,后来是敏捷开发,现在是DevOps,这是现代开发人员构建出色的产品的技术路线。随着DevOps的兴起,出现了持续集成(Continuous Integration)、持续交付(Continuous Delivery) 、持续部署(Continuous Deployment) 的新方法。
持续集成的重点是将各个开发人员的工作集合到一个代码仓库中。通常,每天都要进行几次,主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付的目的是最小化部署或释放过程中固有的摩擦。它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
持续部署是一种更高程度的自动化,无论何时对代码进行重大更改,都会自动进行构建/部署。
DevOps是Development和Operations的组合,是一种方法论,是一组过程、方法与系统的统称,用于促进应用开发、应用运维和质量保障(QA)部门之间的沟通、协作与整合。以期打破传统开发和运营之间的壁垒和鸿沟。
最后我们再来看看上面是敏捷开发,这个称呼似乎还没有所谓的简称,而且这个称呼似乎在国内被滥用了。敏捷开发着重于一种开发的思路,拥抱变化和快速迭代。如何实现敏捷开发,目前似乎尚没有完善的工具链,更多的是一种概念性,调侃的说法“既想马尔跑得快,又想马儿不吃草”的另外一种说法。
内容
持续集成Continuous Integration
集成是将更新的代码合并或者提交到主干源码仓库中。在这个合并或者提交的过程中,都伴随着执行一系列的质量保证活动如代码规范检查、单元测试、安全扫描等来确保代码的质量。
持续部署Continuous Deployment
部署是将制品安装到不同的运行环境的技术操作,如测试环境、准生产环境、生产环境等都需要部署操作。
持续交付Continuous Delivery
持续交付是指持续的将各类变更(包括新功能、缺陷修复、配置变化、实验等)安全、快速、高质量地落实到生产环境或用户手中的能力。持续交付的能力通过自动化流水线的方式实现,减少研发过程中不必要的浪费,近而缩短整个研发过程中所有需求的交付周期。持续交付是一个整体过程,从一个业务端的想法到系统功能可以面对客户的全流程。
极限编程
现在稍微有点规模的系统,很多都是采用分布式/微服务架构,将一个大系统拆分为很多个功能模块进行开发、测试、发布、管理而且现在很多项目都采用极限编程的模式,将原有比较复杂的过程分解为更小的周期进行管理,将开发的成果快速的体现给用户,如果单纯人工操作,就需要大量的人力成本才能达到要求(频繁的开发、测试、部署是很耗时的),另外很容出错。所以自动化的集成和交付是很有必要的
极限编程(ExtremeProgramming,简称XP)是一个轻量级的、灵巧的软件开发方法;同时它也是一个非常严谨和周密的方法;XP是一种近螺旋式的开发方法,它将复杂的开发过程分解为一个个相对比较简单的小周期;通过积极的交流、反馈以及其它一系列的方法,开发人员和客户可以非常清楚开发进度、变化、待解决的问题和潜在的困难等,并根据实际情况及时地调整开发过程。 —摘自百度百科
实现
持续集成(CI):代码提交
技术:GitHub、Gitlab、SVM、BitBucket。
持续集成(CI):静态代码分析
技术:GitHub、Gitlab、SVM、BitBucket。
持续集成(CI):构建
技术:Jenkins、Bamboo CI、Circle CI、Travis CI、Maven、Azure DevOps。
构建验证测试(BVT)/烟雾测试和单元测试:
工件存储:存储库工具(如Jfrog Artifactory)用于存储二进制文件,如.rar、.war、.exe、Msi等
持续集成(CI):测试阶段
技术:Selenium、Appium、Jmeter、SOAP UI,、Tarantula。
集成测试:集成测试是使用诸如Cucumber、Selenium等工具执行的
负载平衡和压力测试:负载平衡和压力测试也使用自动化测试工具(如Selenium、JMeter等)执行,
技术:Spinnaker、Argo CD、Tekton CD。
持续交付(CD):Bake是指从源代码中创建一个不可变的映像实例,该实例在生产环境中具有当前配置。这些配置可能是数据库更改和其他基础设施更新之类的内容。Spinnaker可以触发Jenkins来执行这个任务,而有些组织更喜欢使用Packer。
持续交付(CD):Deploy
持续交付(CD):验证
持续交付(CD):监控
技术:Zabbix、Nagios、Prometheus、Elastic Search、Splunk、Appdynamics、Tivoli。
持续交付(CD):反馈和协作工具
技术:JIRA、ServiceNow、Slack、电子邮件、Hipchat。
工具
git hooks,
Jenkins,travis, Hudson,gitLab-runner
jira, 禅道,confluence,
##