【.com快译】持续集成(CI)/持续交付(CD)管道是一系列步骤,包括从CI/CD流程开始的所有阶段,负责创建自动化和无缝的软件交付。使用CI/CD管道,软件发布工件可以通过管道从代码签入阶段一直进展到测试、构建、部署和生产。这个概念很强大,因为一旦指定了管道,它就可以部分或完全自动化,从而加快流程并减少错误。换句话说,CI/CD管道使组织更容易每天多次自动交付软件。由于CI/CD中各个阶段的自动化,DevOps工程师经常与CI/CD管道混淆。虽然不同的工具可以自动化CI/CD中的各个复杂阶段,但CI/CD的整个软件供应链仍然可能因人为干预而中断。下面将探讨持续集成(CI)/持续交付(CD)流程的各个阶段,以及为什么CI/CD管道对于组织以速度和规模交付代码至关重要。CI/CD阶段:了解人员、流程和技术组织应用程序开发团队通常由开发人员、测试人员/质量保证(QA)工程师、运营工程师和站点可靠性工程师(SRE)或IT运营团队组成。他们紧密合作,将高质量的软件交付给客户。持续集成(CI)/持续交付(CD)是两个独立过程的组合:持续集成和持续交付。下面列出了CI/CD管道中的主要步骤。持续集成(CI):代码承诺持续集成(CI)是构建软件并完成初始测试的过程。持续交付(CD)是将代码与基础架构相结合的过程,确保完成所有测试并遵循策略,然后将代码部署到预期环境中。当然,许多组织都有自己的流程,但主要步骤如下:人员:开发人员和工程师、数据库管理员(DBA)、基础架构团队。技术:GitHub、Gitlab、SVM、BitBucket。过程:代码提交阶段也称为版本控制。提交是将开发人员编写的最新更改发送到存储库的操作。开发人员编写的每个代码版本都会无限期存储。在与协作者讨论和审查更改后,开发人员编写代码并在软件需求、功能增强、错误修复或更改请求完成时提交。管理编辑和提交更改的存储库称为源代码管理(SCM工具)。在开发人员提交代码(代码推送请求)后,代码更改将合并到存储在GitHub等中央存储库中的基本代码分支中。持续集成(CI):静态代码分析人员:开发人员和工程师、数据库管理员(DBA)、基础架构团队、测试人员。技术:GitHub、Gitlab、SVM、BitBucket。流程:开发者编写代码并推送到仓库后,系统会自动触发,开始下一步的代码分析流程。想象一个步骤,其中提交的代码直接构建并在构建或交付期间失败。就机器和人力资源利用而言,这是一个昂贵且缓慢的过程。组织必须检查代码中的静态策略,静态应用程序安全测试(SAST)是一种白盒测试方法,可以使用SAST工具(如SonarQube、Veracode、Appscan等)从内部检查代码,以发现软件缺陷、漏洞和弱点(例如SQL注入等)。这是一种快速检查,其中检查代码是否存在语法错误。虽然此阶段缺乏检查运行时错误的能力,但此功能将在稍后阶段实现。将额外的政策检查放入自动化管道可以显着减少流程中发现的错误数量。持续集成(CI):构建人员:开发人员和工程师。技术:Jenkins、BambooCI、CircleCI、TravisCI、Maven、AzureDevOps。流程:持续集成(CI)流程的目标是定期提交代码并持续构建二进制工件。持续集成过程通过检查添加的新模块是否与现有模块一起工作,有助于更快地发现错误。这有助于减少验证新代码更改所花费的时间。构建工具帮助编译和创建可执行文件或包(.exe、.dll、.jar等),具体取决于用于编写源代码的编程语言。在交付过程中,还会生成SQL脚本,然后将其与基础架构配置文件一起进行测试。简而言之,构建阶段是编译应用程序的阶段。作为构建过程一部分的其他子活动是工件存储、构建验证和单元测试。构建验证测试(BVT)/冒烟测试和单元测试:创建构建后立即执行冒烟测试。构建验证测试(BVT)检查所有模块是否正确集成以及程序的关键功能是否正常运行。测试的目的是丢弃严重损坏的应用程序,以便质量保证团队不会浪费时间安装和测试软件应用程序。在这些检查之后,单元测试(UT)被添加到管道中以进一步减少生产中的故障。单元测试测试开发人员编写的代码的各个单元或组件,以验证它们是否按预期执行。工件存储:一旦准备好构建,包就会存储在一个集中位置或称为工件或存储库设施的数据库中。每天可能会生成许多构建,跟踪所有构建可能很困难。因此,一旦生成并验证了构建,它就会被发送到存储库进行存储。JfrogArtifactory等存储库工具用于存储.rar、.war、.exe、Msi等二进制文件。在这里,测试人员可以在测试环境中手动选择和部署工件进行测试。持续集成(CI):测试阶段人员:测试人员、QA工程师。技术:Selenium、Appium、Jmeter、SOAPUI、Tarantula。过程:在发布构建过程之后,通过一系列自动化测试来验证代码的准确性。这个阶段有助于避免生产中的错误。根据构建的大小,此检查可能会持续几秒到几小时。对于由多个团队提交和构建代码的大型组织,这些检查在并行环境中运行,以节省宝贵的时间并尽早通知开发人员错误。这些自动化测试由测试人员(或QA工程师)设置,他们根据用户故事设置测试用例和场景。他们执行回归分析和压力测试以检查与预期输出的偏差。测试中涉及的活动包括健全性测试、集成测试和压力测试。这是一个非常高级的测试。在这里,可以发现开发人员可能不知道的问题。集成测试:集成测试是使用Cucumber、Selenium等工具执行的,其中将各个应用程序模块组合在一起并作为一个组进行测试,同时评估是否符合指定的功能要求。集成测试后,需要有人批准该组中的更新集应该进入下一阶段,通常是性能测试。这个验证过程可能很乏味,但它是该过程的重要组成部分。测试期间出现了一些新的解决方法。负载均衡和压力测试:负载均衡和压力测试也使用Selenium、JMeter等自动化测试工具进行,以检查应用程序是否稳定运行以及在高流量环境中是否表现良好。由于综合压力测试是长期运行的,因此通常不会在每次更新时都运行。当发布主要新功能时,将对多个更新进行分组并进行完整的性能测试。如果将单个更新移至下一阶段,管道可能会改为包含金丝雀测试。人员:基础设施工程师、站点可靠性工程师(SRE)、运营工程师。技术:Spinnaker、ArgoCD、TektonCD。流程:测试阶段完成后,标准代码准备部署到服务器,与主应用集成。在部署到生产之前,它们将被部署到测试/暂存或产品团队内部使用的测试环境。在构建可以移动到这些环境之前,构建必须经过两个名为Bake和Deploy的子存储库。这两个阶段都是Spinnaker固有的。持续交付(CD):BakeBake是指从源代码创建一个不可变的图像实例,该实例具有生产环境中的当前配置。这些配置可能是数据库更改和其他基础设施更新之类的东西。Spinnaker可以触发Jenkins来执行这个任务,而一些组织更喜欢使用Packer。持续交付(CD):DeploySpinnaker自动将Bake映像传递到Deploy阶段。这是设置要部署到集群的服务器组的位置。与上述测试流程类似,在Deploy阶段执行功能相同的流程,首先进入测试阶段,然后进入生产环境,最后进行审批和检查。它的整个过程由Spinnaker等工具处理。持续交付(CD):Validation这也是组织团队优化整个CI/CD流程的关键岗位。因为现在进行了如此多的测试,所以很少出现故障。但是,此时必须尽快解决任何故障,以最大程度地减少对最终客户的影响。团队还应该考虑将这部分流程自动化。使用蓝绿部署、金丝雀分析和滚动更新等策略部署到生产环境。在部署阶段,监视正在运行的应用程序以验证当前部署是否正确或是否需要回滚。持续交付(CD):监控人员:站点可靠性工程师(SRE)、运营团队。技术:Zabbix、Nagios、Prometheus、ElasticSearch、Splunk、Appdynamics、Tivoli。过程:要使软件发布具有故障安全性和健壮性,跟踪生产中发布的健康状况至关重要。应用程序监控工具将跟踪性能指标,例如CPU利用率和发布延迟。日志分析器将扫描由底层中间件和操作系统生成的大量日志,以识别行为并追踪问题的根源。如果在生产中出现任何问题,将通知利益相关者以确保生产环境的安全性和可靠性。此外,监控阶段可帮助组织收集有关其新软件更改如何为收入做出贡献的情报,帮助基础架构团队跟踪系统行为趋势并执行容量规划。持续交付(CD):反馈和协作工具人员:站点可靠性工程师(SRE)、运维团队。技术:JIRA、ServiceNow、Slack、电子邮件、Hipchat。流程:DevOps团队的目标是不断加快发布速度,然后不断减少错误和性能问题。这是通过不时发送电子邮件向开发人员、项目经理提供有关新版本的质量和性能的反馈来完成的。通常,反馈系统是整个软件交付过程的一部分。因此,交付中的任何更改都会频繁地记录到系统中,以便交付团队可以对其采取行动。结论组织必须评估一个整体的持续交付解决方案,该解决方案可以自动化或促进上述这些阶段的自动化。原标题:什么是CI/CD流水线?添加一名作者
