前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[完结13章]云时代必修课-云原生CI/CD(持续集成与交付)全流程实战

[完结13章]云时代必修课-云原生CI/CD(持续集成与交付)全流程实战

原创
作者头像
坚强的企鹅904695682
发布2024-08-22 10:10:31
1390
发布2024-08-22 10:10:31

前言:

随着应用向云端迁移,持续集成与交付成为一项核心技能。然而,云原生 CI/CD 技术与工具繁多,跨项目迁移难度大,对于缺乏经验技术人员来说,学习曲线陡峭。本文从零带大家掌握CI/CD工具与平台,模拟企业项目流程,涵盖代码提交、自动化构建、测试至高效部署每个环节,确保学习既系统又流畅,在收获基础理论同时,更能通过实战将CI/CD核心技能转化为生产环境能力,提升云原生技术实力和个人职业竞争力!

一、什么是云原生?

‌云原生是一种基于‌云计算的软件开发和部署方法论,旨在充分利用云计算环境的优势,实现高可用性、可扩展性和灵活性。它强调将应用程序和服务设计为云环境下的原生应用,通过采用容器化、‌微服务架构、‌自动化管理、‌分布式架构和持续交付等技术手段,提高应用程序的可移植性、可维护性、可扩展性和可靠性。云原生不仅包括技术层面的应用,还包括一种开发理念,即借助云计算的优势重新构思和设计应用,使其适应动态、弹性和分布式的云环境。

二、持续集成(Continuous Integration, CI)

持续集成是一种软件开发实践,其中开发人员经常(通常每天)将他们的代码更改提交到共享的代码库中。每次代码被提交后,自动化的构建和测试过程将被触发,以确保代码的正确性和可行性。持续集成的目标是在代码被集成到主要分支中之前发现和修复错误,从而减少集成冲突和发布延迟。

三、持续交付(Continuous Delivery, CD)

持续交付是一种软件交付策略,其中软件开发人员将代码更改经过自动化的构建、测试和部署过程后,能够在任何时候快速、可靠地向生产环境中部署。持续交付的目标是减少部署风险,提高软件的可靠性和性能,并快速响应市场需求。

三、 持续集成与持续交付的关系和区别

虽然持续集成和持续交付都是软件开发实践,但它们在目标和实现上有所不同。持续集成的目标是在代码被集成到主要分支中之前发现和修复错误,从而减少集成冲突和发布延迟。而持续交付的目标是减少部署风险,提高软件的可靠性和性能,并快速响应市场需求。

在实践中,持续集成可以看作是持续交付的一部分,它是持续交付过程中的一个关键步骤。在持续交付中,代码通过持续集成过程进行构建和测试,然后通过自动化部署过程向生产环境中部署。因此,持续集成可以看作是持续交付的一部分,它为持续交付过程提供了基础设施和工具。

四、Jenkins介绍

Jenkins是一个开源的、用Java编写的持续集成和持续交付(CI/CD)工具。它提供了一种简单易用的方式来自动化构建、测试和部署软件。Jenkins的主要目标是帮助开发团队加快软件开发过程,提高软件质量,并通过自动化流程减少手动操作和重复性工作。

五、安装Jenkins

必须在linux系统上安装了jdk,而且jdk的版本是[11~20)之间。如果你的jdk版本是8的话,前面一切正常,但到了后面安装插件就会报错。

下载相关文件

解压Linux版本的JDK:tar -zxvf xxxx.tar.gz

配置JDK环境

1、vi /etc/profile

2、在文件的最后加上:export JAVA_HOME=/usr/app/jdk17

export PATH=$JAVA_HOME/bin:$PATH

3、环境配置好后:source /etc/profile。

先运行yum install fontconfig:fontconfig 是一个灵活的字体配置和选择系统,用于定制字体查找规则并提高字体的可访问性和可读性。

运行jenkins.war

1、nohup java -jar /usr/app/jenkins.war --httpPort=8777 >/usr/app/jenkins.log 2>&1 &上面命令是在Linux系统中以后台方式启动Java应用程序(具体来说是Jenkins)而不占用终端会话。

2、nohup:这个命令意味着“不挂断”。它使得启动的进程不会因为终端会话结束而被终止。

3、java -jar /usr/app/jenkins.war:这部分启动了Java应用程序。java -jar是运行Java Web应用程序的标准方式,/usr/app/jenkins.war是Jenkins应用的WAR文件路径。

4、--httpPort=8777:这是传递给Jenkins应用的一个参数,指定了HTTP服务监听的端口为8777。

5、>/usr/app/jenkins.log:这将标准输出重定向到/usr/app/jenkins.log文件,记录Jenkins运行时的所有输出信息。

6、2>&1:这将标准错误输出(通常为文件描述符2)重定向到与标准输出相同的地方(这里是指向jenkins.log)。这样做的目的是将所有输出(包括错误信息)都合并到同一个日志文件中。

7、&:最后的符号&表示命令应该在后台运行,立即返回控制台,使用户可以继续执行其他命令,而Jenkins应用则在后台持续运行。

六、DevOps概述

介绍完了持续集成、持续交付和持续部署三大件,接下来在讲讲 DevOps。与三大件不同,DevOps 更偏向于一种对于文化氛围的构建。

DevOps 一词本身是对于 development 以及 operation 两个词的混合,其目的在于缩短系统开发的生命周期,在这过程中发布特性、修复bug以及更新均被紧密的结合。

听起来似乎有点玄乎,可以这样理解:DevOps 也即是促使开发人员与运维人员之间相互协作的文化。

DevOps 的概念似乎与持续交付的概念有些类似,两者均旨在促进开发与运维之间的协作,但是实际上两者差别很大:DevOps 更偏向于一种文化的构建,在 DevOps 文化指导下,团队中将包含了具有不同技能的人员(开发、测试等),并通过自动化测试与发布的手段,更快、更高质量的生产软件。

DevOps文化通常与持续交付相关联,因为它们都旨在增强开发人员和运营团队之间的协作,并且都使 用自动流程来更快,更频繁,更可靠地构建,测试和发布软件。这些都是像我们这样的人想要的东西。尽管开发团队经常没有看到流程改进的最直接好处,但CI,CD和DevOps对我们其他人来说却有很多好处。简而言之,我相信实践CD并拥护DevOps文化的组织将更频繁地向其客户提供更有价值,更可靠的软件。

七、DevOps 如何影响生产软件的基础设施?

传统意义上,管道中使用的各个硬件系统都有配套的软件(操作系统、应用程序、开发工具等)。在极端情况下,每个系统都是手工设置来定制的。这意味着当系统出现问题或需要更新时,这通常也是一项自定义任务。这种方法违背了持续交付的基本理念,即具有易于重现和可跟踪的环境。

多年来,很多应用被开发用于标准化交付(安装和配置)系统。同样,虚拟机virtual machine被开发为模拟在其它计算机之上运行的计算机程序。这些 VM 要有管理程序才能在底层主机系统上运行,并且它们需要自己的操作系统副本才能运行。

后来有了容器container。容器虽然在概念上与 VM 类似,但工作方式不同。它们只需使用一些现有的操作系统结构来划分隔离空间,而不需要运行单独的程序和操作系统的副本。因此,它们的行为类似于 VM 以提供隔离但不需要过多的开销。

VM 和容器是根据配置定义创建的,因此可以轻易地销毁和重建,而不会影响运行它们的主机系统。这允许运行管道的系统也可重建。此外,对于容器,我们可以跟踪其构建定义文件的更改 —— 就像对源代码一样。

因此,如果遇到 VM 或容器中的问题,我们可以更容易、更快速地销毁和重建它们,而不是在当前环境尝试调试和修复。

这也意味着对管道代码的任何更改都可以触发管道新一轮运行(通过 CI),就像对代码的更改一样。这是 DevOps 关于基础架构的核心理念之一。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
CODING DevOps
CODING DevOps 一站式研发管理平台,包括代码托管、项目管理、测试管理、持续集成、制品库等多款产品和服务,涵盖软件开发从构想到交付的一切所需,使研发团队在云端高效协同,实践敏捷开发与 DevOps,提升软件交付质量与速度。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档