背景
传统软件开发的瀑布模型已经过时,敏捷方法正在迅速取而代之。与DevOps一起,敏捷帮助开发和运维团队共同创建了一个强大且可预测的软件交付方式。作为转变的一部分,在使用正确的工具集时,诸如持续集成(CI)和持续交付(CD)等高级方法可以实现从提交到测试再到部署的高效交付流水线。
无论是在初创公司还是大型企业,转向DevOps都可以减少人为错误的发生。该模型允许研发维持质量,同时加快端到端交付流程。
什么是DevOps?
DevOps 是一套最佳实践方法论,旨在应用和服务的生命周期中促进IT技术人员之间的协作和交流,最终实现:
持续整合:从开发到运维和支持的轻松切换;
持续部署:持续发布,或尽可能经常的发布;
持续反馈:在应用和服务生命周期的各个阶段寻求来自利益相关者的反馈。
CI/CD流水线的4个阶段
考虑一个用例,其中组织正在构建一个产品,其中有多个远程团队在不同的微服务上工作。每个团队都有自己的服务路线图和交付计划。为了实现集成以实现强大的交付,CI/CD流水线是必须的。使用CI/CD流水线,只要开发团队对代码进行更改,流水线中的自动化就会导致在各种环境中自动编译,构建和部署。
CI/CD流水线可以分为应用程序生命周期的四个阶段。每个阶段都将在CI/CD中发挥关键作用。可用的工具将有助于实现交付的一致性,速度和质量。如下所示,四个阶段是源代码,构建,测试和部署。
1.源代码
组织将应用程序代码存储在集中式存储库系统中,以支持版本控制,跟踪更改,协作和审计,以及确保安全性并保持对源代码的控制。 此阶段的关键元素是版本控制的自动化。 我们可以将其视为CI阶段的基线单位。自动化涉及监视版本控制系统的任何更改和触发事件,例如代码编译和测试。
假设你正在与其他团队成员一起开发Git存储库。每当将更改提交到存储库时,Git webhook都会触发编译代码并执行单元测试用例的Jenkins作业的通知。如果编译失败或测试用例失败,则会自动向整个开发人员组发送电子邮件。
2.构建
这是应用程序开发的关键阶段,当完全自动化时,它允许开发团队每天多次测试和构建他们的版本。此阶段包括编译,打包和运行自动化测试。构建自动化实用程序(如Make,Rake,Ant,Maven和Gradle)用于生成构建工件。
然后,可以将构建工件存储到工件存储库中并部署到环境中。诸如JFrog Artifactory之类的工件存储库解决方案用于存储和管理构建工件。使用工件存储库的主要优点是,如果有必要,它们可以恢复到以前版本的构建。高度可用的云存储服务(如AWS S3)也可用于存储和管理构建工件。在AWS上运行构建服务,应考虑AWS CodeBuild。 Jenkins是最受欢迎的开源工具之一,可用于协调构建过程。
3.测试
自动化测试在任何应用程序开发--部署周期中都发挥着重要作用。所需的自动化测试可分为三个不同的类别:
单元测试:开发人员将应用程序细分为小的代码单元并执行测试。此测试应该是构建过程的一部分,并且可以使用JUnit等工具自动执行。
集成测试:在分布式应用程序的微服务领域,当应用程序的不同模块集成时,单独的组件应该工作是很重要的。此阶段可能涉及API测试,与数据库集成或其他服务。此测试通常是部署和发布过程的一部分。
功能测试:这是应用程序或产品的端到端测试,通常作为发布过程的一部分在登台服务器上执行。它可以通过Selenium等工具实现自动化,以便在不同的Web浏览器中高效运行。
为了执行简化的测试,JMeter和Selenium等框架工具可以轻松地与Jenkins集成,以自动执行功能测试,作为端到端测试的一部分。
4.部署
完成构建并完成候选版本的自动化测试后,流水线的最后一个阶段是将新代码自动部署到流水线中的下一个环境。在此阶段,测试的代码将部署到暂存或生产环境。如果新版本在每个阶段都通过了所有测试,则可以将其移动到生产环境中。有各种部署策略,例如蓝绿部署,金丝雀部署和就地部署,以便在生产环境中进行部署:
在蓝绿色部署中,将有多个并行运行的生产环境。新的“绿色”版本的应用程序或服务与在单独的基础架构上运行的最后一个稳定的“蓝色”版本并行配置。一旦你的绿色经过测试并准备就绪,就可以取消配置蓝色。
在金丝雀部署中,首先对较少的节点进行部署,在使用这些节点进行测试之后,将部署到所有节点。
就地部署将代码直接部署到所有活动节点,并可能导致停机;但是,通过滚动更新,您可以减少或消除停机时间。
此外,通过部署,需要考虑三个关键的自动化元素:
▪ 云基础架构配置:AWS CloudFormation,AWS OpsWorks Stacks和Terraform等基础架构管理工具,只需点击几下或API调用,即可帮助创建模板并将整个底层应用程序堆栈(包括计算,存储和网络)从一个环境克隆到另一个环境。
▪ 使用Chef,Puppet和AWS OpsWorks等工具进行配置管理自动化可确保配置文件处于所需状态,包括操作系统级配置参数(文件权限,环境变量等)。多年来,这些也发展到自动化整个流程,包括代码流和部署以及基础架构级别的资源协调。
▪ 容器化和编排:人们必须等待服务器引导以部署新版本代码的日子已经一去不复返了。 Docker等容器用于打包和扩展特定服务,并包含运行它所需的一切。服务打包可以支持分段和生产之间所需的隔离,并与Kubernetes等编排工具一起,可以帮助自动化部署,同时降低在不同环境中移动代码时的风险。
现在我们已经涵盖了流水线的所有阶段,让我们看看项目实践案例。
流水线使用步骤
1.检出代码(GetCode)
目前代码管理主要使用Gitlab和SVN,通过Jenkins获取项目代码库信息(代码库类型、地址、标签、分支)检出源代码。
2.代码扫描(CodeScan)
对接SonarQube做代码的质量检测,SkipSonar参数为false时,由Sonar-Scanner实现代码扫描。
3.构建(Build)
构建是一个打包的过程,常用的打包工具有Maven、Ant、Gradle、Npm。通过Jekins获取项目类型执行Mvn/Gradle/Ant/Npm打包构建,构建成功后jar包可以上传到Nexus制品仓库。
4.单元测试(Test)
根据编写的测试用例完成测试,通常是以Mvn Test方式执行。
5.发布(Deploy)
SkipDeploy参数为false的时候执行发布,发布的应用服务器可以是虚拟机或容器。
结论:自动化提高工作效率
无论是推动提交部署新版本还是在失败后恢复,自动化流程都可以节省时间,保持质量,保持一致性,并允许研发团队加快和预测交付。
网友评论