代码编织梦想

一、CI/CD 的概念

CI/CD是一种软件开发流程,旨在通过自动化和持续的集成、测试和交付实现高质量的软件产品。
CI(Continuous Integration)持续集成
目前主流的开发方式是协同开发,即多位开发人员同事处理同意应用不同模块或功能。
如果企业在同一时间将所有分支代码集成在一起,那么将难以避免的出现代码冲突问题,从而导致效率低下。
而CI可以帮助开发者更方便地将代码合并到主分支。当开发人员将代码合并到主分支时,系统会自动对这些更改进行自动化测试,如果发现这些代码存在问题,CI可以更加轻松和快速地修复这些问题。

CD(Continuous Delivery)持续交付
在CI完成了集成工作之后,持续交付便可以自动将已验证的代码发布到对应的存储库。
持续交付旨在建议一个可以随时将开发环境中的功能部署到生产环境的代码库。

CD(Continuous Deployment)持续部署
对于一个完整、成熟的 CI/CD 管道来说,最后的阶段是持续部署。
它是作为持续交付的延伸,持续部署可以自动将应用发布到生产环境。
实际上,持续部署意味着开发人员对应用的改动,在编写完成后的几分钟内就能及时生效(前提是它通过了自动化测试)。这更加便于运营团队持续接收和整合用户反馈。
总而言之,所有这些 CI/CD 的关联步骤,都极大地降低了应用的部署风险。
不过,由于还需要编写自动化测试以适应 CI/CD 管道中的各种测试和发布阶段,因此前期工作量还是很大的。

二、CI/CD 的核心流程

自动构建:这个过程通常指使用构建工具(如 Maven、Gradle 等)对代码进行编译、打包和生成可执行文件等操作。构建工具需要与版本控制系统配合使用,当有新的代码提交时,构建工具会自动触发构建操作。

自动化测试:这个过程通常指使用测试框架(如 JUnit、TestNG 等)对代码进行单元测试、集成测试、功能测试和性能测试等操作。测试框架需要与构建工具配合使用,当构建成功后,测试框架会自动运行相应的测试用例,并生成测试报告。

自动化部署:这个过程通常指使用部署工具(如 Ansible、Puppet、Chef 等)将构建好的软件包部署到目标环境中。部署工具需要与测试框架配合使用,当测试通过后,部署工具会自动将新版本的软件部署到生产环境中。

自动化监控:这个过程通常指使用监控工具(如 Nagios、Zabbix、Prometheus 等)对部署在生产环境中的应用程序进行监控和故障排查。监控工具可以对系统资源、应用程序性能、日志等方面进行监控,并提供报警、自愈等功能。

三、CI/CD的重要性

快速交付:CI/CD减少了手动干预,加速了代码的构建、测试和部署,缩短了交付周期。
错误减少:自动化测试和部署减少了人为错误的风险,提高了软件质量。
持续反馈:CI/CD流程提供了快速的反馈,使开发者能够快速识别和修复问题。

四、CI 和 CD 有什么区别

CI/CD 中的“CI”始终指持续集成,它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。
CI/CD 中的“CD”指的是持续交付和/或持续部署,这些相关概念有时会交叉使用。两者都事关管道后续阶段的自动化,但它们有时也会单独使用,用于说明自动化程度。

持续交付(第一种CD)通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。
持续部署(另一种“CD”)指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。持续部署以持续交付的优势为根基,实现了管道后续阶段的自动化。

CI/CD 既可能仅指持续集成和持续交付构成的关联环节,也可以指持续集成、持续交付和持续部署这三项构成的关联环节。更为复杂的是,有时“持续交付”也包含了持续部署流程。
归根结底,我们没必要纠结于这些语义,您只需记得 CI/CD 其实就是一个流程(通常形象地表述为管道),用于实现应用开发中的高度持续自动化和持续监控。

五、常用CI/CD工具

1. Jenkins

开源,基于Java开发的一种持续集成工作,用于监控持续重复的工作,旨在提供一个开放易用的软件平台。
特点
1) 安装方便,直接通过安装包安装。
2) 配置简单,可以通过Web界面轻松地设置和配置,提供动态错误检查和内置帮助。
3) 插件丰富。
4) 可扩展,可以通过插件架构进行扩展。
5) 分布式,可以在多台机器上发布工作,帮助用户在多个平台上更快地驱动构建、测试和部署。
在这里插入图片描述

2. Travis CI

托管的持续继承服务,适用于GitHub仓库。
最初开源,多年后转为闭源,专注于CI工作,通过自动化测试和警报系统提高构建过程的效能。
特点
1) 使用YAML文件配置。
2) 基于云。
3) 支持Docker运行测试。
4) 开箱即用支持更多语言。
5) 支持构建矩阵。
6) 开源项目免费计划。
缺点
1) 价格高,没有免费的企业方案
在这里插入图片描述

3. GitLab CI/CD

集成在GitLab中,支持从源代码管理到部署的全流程。
除了测试和构建项目之外,该工具还可以将build部署到基础设施中,而且只要了解各代码段的位置,就能对其开展针对性追踪。

特点
1) 使用YAML文件配置。
2) 继承了GitLab管理的Git仓库,可直接执行GitLab提供的CI/CD管道。
3) 可以基于Docker容器和Kubernetes集群等运行环境。
4) 可以使用共享和分布式运行策略,以调高性能和可靠性。
5) 采用分布式架构来降低压力和提高容错能力。
6) 通过容器化部署来简化运维和降低故障率。
在这里插入图片描述

4. TeamCity

是Java中基于服务器的CI/CD管道工具。由JetBrains开发和维护,可以安装在Windows和Linux服务器上。

特点
1) 支持各种版本呢控制系统。
2) 用户管理简单可靠。
3) 与VS、IntelliJ Concept等IDE简单集成。
缺点
1) 输出日志对用户不友好。
2) 很难手机不同项目的状态。
在这里插入图片描述

5. Circle CI

这是一款基于云的工具,可以自动执行集成和部署任务,适用于为开源项目和大型项目实现CI/CD。
官网
特点
1) 基于云,同时也提供了本地解决方案,允许在私有云或数据中心运行。
2) 商业账户也有免费计划。
3) 可以通过SSH模式访问容器并进行自己的检查。
4) 使用方便,只需要很少的配置。
5) 会检查第三方依赖项,缓存必要的安装内容,而不是持续安装所需的环境。
缺点
1) 仅支持两个版本的Ubuntu免费(12.04和14.04)。
2) 基于云,所以若其停止支持某个软件,将无法被阻止。
3) 开箱即用仅支持以下语言:Go(Golang), Haskell, Java, PHP, Python, Ruby/Rails, Scala。
在这里插入图片描述

6. Bamboo

Bamboo是一种CI工具,由Atlassian开发,提供了在单个窗口中执行、测试和发布的工具。
特点
1) 内置Jira Software和Bitbucket Server集成
2) 内置Git分支工作流程
3) 提供REST API
在这里插入图片描述

7. GoCD

GoCD是来自Thoughtworks的开源持续继承服务器,与其他CI/CD工具相比,他的主要区别在于VSM功能。
VSM跨Pipeline的完整端到端视图,他成功地将其映射到“部署Pipeline”或“持续交付Pipeline”的概念。

特点
1) 专注于持续交付
2) 支持插件
3) 易于定制
在这里插入图片描述

8. CodeShip

这是一个托管的持续继承平台,如果公司使用GitHub进行版本控制系统,使用CodeShip可以大大提高效率,主要原因是他能够直接从GitHub项目进行测试、build和部署。

特点
1) 提供分布式构建环境。
2) 可以与云平台无缝集成。
3) 与Docker紧密集成。
缺点
1) 扩展性受限制。
2) 社区支持小。
在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zhengzhaoyang122/article/details/143170557

gitlab ci/cd工作原理及使用_benben_2015的博客-爱代码爱编程

持续集成(Continuous Integration) 持续集成指的是频繁的将代码集成到主干,每次集成都通过自动化的构建(包括编译、发布、自动化测试)来验证,它的好处主要有两个: 快速发现错误。每完成一点更新,就集成到

CI/CD的常用工具及原理-爱代码爱编程

CI/CD的常用工具及原理 本篇文章开始,将介绍CI/CD相关工具的搭建过程及CI/CD流水线的实现过程 CI/CD:持续集成/持续发布(continuous integration/continuous deployment) 持续集成:是一种开发实践,要求开发人员每天多次将代码集成到共享存储库中。” (来源:ThoughtWorks) “持续交

CI/CD 流程以及原理-爱代码爱编程

简介 从CI/CD过程开始,包含所有阶段并负责创建自动化和无缝的软件交付的一系列步骤称为CI/CD管道工作流。使用CI/CD管道,软件发布工件可以从代码提交阶段到测试、构建、部署和生产阶段在管道中移动和前进。这个概念非常强大,因为一旦指定了一个管道,它的一部分或全部就可以实现自动化,从而加快流程并减少错误。换句话说,CI/CD管道使企业更容易一天自动多次

CI/CD 面试题整合-爱代码爱编程

文章目录 一、DevOps 术语和定义1.什么是DevOps2. 什么是持续集成3. 什么是持续交付4. 什么是持续部署5. 持续测试及其优点6. 什么是版本控制及其用途?7. 什么是Git?二、实施DevOps的原因1. DevOps为什么重要?2. DevOps对开发人员有何帮助?3. 为什么DevOps变得越来越流行?4. CI/CD有什么好

【基于 gitlab 的 ci/cd 实践】01、gitlab ci/cd 基础概念-爱代码爱编程

目录 一、为什么要做 CI/CD ? 1.1 背景-传统的应用开发发布模式 问题 1.2 持续集成与持续交付 持续集成(CI) 持续交付(CD) 持续部署(CD) 1.3 CI/CD 的价值体现 1.4 推荐常用的 CI/CD 工具 Jenkins GitLab 二、GitLab CI/CD 功能简介 2.1 GitLab 内置持

gitlab-爱代码爱编程

由于公司没有运维,写go服务时各个环境编译部署还是略显麻烦,由于代码管理使用的是 gitlab,所以决定使用 gitlab 自带的 CI/CD 来做自动编译和部署,这样每次提交代码以后就可以自动部署到服务器上了。 gitl

junit5使用suite功能-爱代码爱编程

1.需要的suite引入的maven依赖 <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite-api</artifactI

java中的序列化和反序列化?-爱代码爱编程

博主介绍:✌全网粉丝50W+,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据

如何利用 kpaas 低代码及 ci/cd 优化企业业务集成与流程-爱代码爱编程

随着业务的不断扩张和市场竞争的日益激烈,企业对 IT 系统的依赖程度越来越高。然而,传统的软件开发模式却常常让企业陷入困境。 想象一下这样的场景:企业有了新的业务需求,需要开发一款新的应用程序来支持业务流程的优化。但 IT 部门人员有限,开发资源紧张,按照传统的开发方式,需要耗费大量的时间和人力进行编码、测试、部署等一系列繁琐的工作。这不仅导致项目周期漫

威胁 windows 和 linux 系统的新型跨平台勒索软件:cicada3301-爱代码爱编程

近年来,网络犯罪世界出现了新的、日益复杂的威胁,能够影响广泛的目标。 这一领域最令人担忧的新功能之一是Cicada3301勒索软件,最近由几位网络安全专家进行了分析。他们有机会采访了这一危险威胁背后的勒索软件团伙的成员。 Cicada3301的崛起:跨平台勒索软件 Cicada3301不仅仅是勒索软件。它在Windows和Linux系统上运行

我们正在谈论 ci/cd-爱代码爱编程

本篇内容是根据2021年10月份#162 We’re talkin’ CI/CD音频录制内容的整理与翻译 持续集成和持续交付都是我们听说过的术语,但它们的真正含义是什么?如果做得好,CI/CD 会是什么样子?我们可能想避免

jenkins和gitlab整合构建ci/cd流水线-爱代码爱编程

配置环境 虚拟机建议4G起步 192.168.58.199 192.168.58.200  部署Jenkins 部署Jenkins参考这篇文章:Jenkins安装部署_connecting to pkg.jenkins.io (pkg.jenkins.io)|151.-CSDN博客  安装完毕之后根据下图操作 选择git