什么是持续集成和持续部署的完整流程?

摘要:〇、前言 CICD 是现代软件开发的核心实践,通过自动化和协作,显著提升交付效率和质量。 本文将对 CI 和 CD 这两个概念进行简要介绍,供参考。 一、CICD 的核心概念 CICD 是 DevOps 实践的核心组成部分,旨在通过自
〇、前言 CI/CD 是现代软件开发的核心实践,通过自动化和协作,显著提升交付效率和质量。 本文将对 CI 和 CD 这两个概念进行简要介绍,供参考。 一、CI/CD 的核心概念 CI/CD 是 DevOps 实践的核心组成部分,旨在通过自动化流程加速软件交付,提高质量和可靠性。 它的核心概念有三个:持续集成、持续交付和持续部署。下面将详细介绍。 另外,什么是 DevOps? 它是一种结合了 开发(Development) 和 运维(Operations) 的文化和实践,旨在通过协作和自动化工具,加速软件交付流程,同时提高质量、灵活性和可靠性。DevOps 的核心目标是打破开发团队和运维团队之间的壁垒,促进跨职能协作,从而实现更高效的软件生命周期管理。 1.1 持续集成(CI:Continuous Integration) CI 就是在开发团队频繁(通常每天多次)将代码变更合并到共享主分支或开发分支时,通过自动化构建和测试,来验证代码的正确性。 CI 的目标是: 减少集成冲突:通过频繁合并代码,尽早发现和解决集成问题。 自动化验证:每次代码提交后自动执行编译、单元测试和集成测试,确保代码质量。 流程示意图如下: 关键节点如下详细介绍: 1.1.1 代码提交阶段 开发人员将本地代码推送到版本控制系统(如 Git)的远程仓库。 参与者:开发工程师,数据库管理员(DBA),基础架构团队。 技术:GitHub,GitLab,SVM,BitBucket。 代码提交阶段也可以叫做【版本控制】。简单来说,就是在一个版本的开发阶段完成后,将有变更的代码提交代码库中。 每个版本所修改的内容都会被无限期地存储,以供后续查找。管理编辑和提交变更的存储库称为源代码管理工具(配置管理工具)。 在开发人员提交代码(代码推送请求)后,代码更改被合并到主线代码分支中,这些主线代码分支存储在 GitHub 这样的中央存储库中。 1.1.2 静态代码检查阶段 开发人员将新版本代码提交到仓库后,就会触发下一阶段:静态代码检查。 参与者:开发工程师,数据库管理员(DBA),基础架构团队 技术:GitHub,GitLab,SVM,BitBucket 开发过程中存在这种情况:提交的代码可以构建成功,但在部署期间构建失败。无论从机器还是人力资源的利用率而言,这都是一个缓慢而昂贵的过程,因此必须检查代码中的静态策略。 SAST(Static Application Security Testing 静态应用程序安全性测试):SAST 是一种白盒测试方法,可以使用 SonarQube,Veracode,Appscan 等 SAST 工具从内部检查代码,以发现软件缺陷,漏洞和弱点(例如 SQL 注入等)。这是一个快速检查过程,其中检查代码是否存在语法错误。 将额外的策略检查加入自动化流水线中可以显著减少流程中稍后发现的错误数量。 1.1.3 构建 构建阶段就是编译应用程序的阶段。 参与者:开发工程师 技术:Jenkins,Bamboo CI,Circle CI,Travis CI,Maven,Azure DevOps 持续集成(CI)过程的目标是,提交的代码持续构建为二进制文件或构建产物。 通过持续集成,来检查添加的新模块是否与现有模块兼容,不仅有助于更快地发现 Bug,还有助于减少验证新代码更改的时间。 构建工具可以根据几乎所有编程语言的源代码创建可执行文件或包(.exe,.dll,.jar等)。在构建过程中,还可以生成 SQL 脚本,配合基础设施配置文件一起进行测试。 另外,Artifactory 存储、构建验证测试和单元测试也可以作为构建过程的一部分。 Artifactory 存储:它是由 JFrog 公司开发的一款二进制存储库管理软件,它提供了全面的解决方案来管理二进制文件(如 jar、war、zip、tar.gz 等),这些文件通常是在软件开发过程中生成的构建输出。Artifactory 支持广泛的技术栈和生态系统,包括但不限于 Maven、Gradle、Docker、npm、NuGet 等,为开发者提供了一个集中的平台来存储、管理和分发他们的制品。 构建验证测试(BVT)/冒烟测试/单元测试:创建构建后立即执行冒烟测试。BVT 将检查所有模块是否正确集成,以及程序的关键功能是否正常运行。这样做的目的是拒绝严重损坏的应用程序,以使 QA 团队不会在安装和测试软件应用程序步骤浪费时间。在完成这些检查后,将向流水线中执行 UT(单元测试),以进一步减少生产中的故障。单元测试可验证开发人员编写的单个单元或组件是否按预期执行。
阅读全文