前言:
随着应用向云端迁移,持续集成与交付成为一项核心技能。然而,云原生 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 关于基础架构的核心理念之一。