零基础学习如何构建CI/CD管道

译文
运维 系统运维
作为DevOps落地的起点,理解CI/CD、并学会如何从零开始构建管道是非常重要的。DevOps是一种软件开发的方法,它涉及到持续开发、持续测试、持续集成、持续部署、以及在整个开发的生命周期中对于软件的持续监控。

【51CTO.com快译】对于CI/CD(持续集成/连续部署)管道的实现是如今构建DevOps模式的基础。通过自动化应用程序的生成、测试与部署,它能够弥合开发和运营团队之间的差距。通过本文,您将了解到何为CI/CD管道、以及它的工作原理。

在讨论CI/CD管道之前,让我们先来理解一下DevOps。 

零基础学习如何构建CI/CD管道

DevOps是一种软件开发的方法,它涉及到持续开发、持续测试、持续集成、持续部署、以及在整个开发的生命周期中对于软件的持续监控。所有顶尖公司都通过采用该流程,实现了高质量软件的开发、研发周期的缩短,以及客户满意度的提高,因此它非常适合于大多数公司的采纳与跟进。

想学习DevOps,就需要先理解它的生命周期。我们下面来看看DevOps的生命周期,并探讨一下它与各个软件开发阶段之间的关系。 

零基础学习如何构建CI/CD管道

CI代表了持续集成,而CD则代表着持续交付或持续部署。如上图所示,您可以将其视为类似于软件开发生命周期的一个过程。 

让我们具体来看看它是如何工作的。上述管道从逻辑的角度演示、说明了软件是如何沿着其生命周期的每个阶段向前移动,直至最终被交付给客户或部署到生产环境中。

让我们假设一个CI/CD的管道场景。例如:您要构建一个Web应用程序,并将它部署到在线的Web服务器上。那么您手头应该有一组负责代码编写的开发团队,他们将进一步去着手构建Web应用程序。

最初,开发团队将软件代码提交到版本控制系统(如git或svn)。接下来,代码进入构建阶段,这是管道的第一个阶段,开发人员将其代码导入其中,进而在打上适当的版本标签之后,再返回到版本控制系统。 

假设我们手头已有一些Java程序代码,并且需要在执行之前进行构建。那么在经过了刚才的版本控制阶段,代码再次来到构建阶段,并在此完成编译。所谓构建阶段,实际上就是您从不同的存储库分支处获取该代码的所有特征,通过合并,最后使用编译器来对它进行编译的整个过程。 

一旦完成了构建,我们就进入到了测试阶段。在此阶段中,我们将采取各种测试,其中包括:功能块测试、单元测试、以及可用性测试。

 

在测试完成之后,我们将移步至部署阶段,即:将代码部署到暂存服务器或测试服务器中。在此阶段,您可以通过模拟器来查看具体的代码,及其整个应用程序的运行状况。 

一旦成功部署了代码,您就可以开展另一轮可用性测试了。如果一切正常,那么该代码就可以被部署到生产环境了。 

同时,如果在任何一个步骤中出现了错误,您完全可以通过电子邮件发回给开发团队,以便他们及时予以修复。然后,他们会将新的代码推送到版本控制系统中,让其重回管道。 

此流程周而复始,直到我们完成所有的测试与验证,最终将代码部署并导入生产环境的服务器上。

至此,我们已经了解了CI/CD管道及其工作原理。下面,我们将继续讨论何为Jenkins、如何通过Jenkins来部署演示性代码、以及自动化整个过程。

CI工具及其他在CI/CD管道中的重要性

我们的任务是:从开发团队提交代码,到我们将其投入生产环境的全过程,实现自动化。因此,为了在整个软件开发生命周期中实现DevOps管道的自动化模式,我们需要用到一些相应的自动化工具。 

Jenkins为我们提供了各种接口和工具,来自动化整个软件交付的过程。

首选,我们需要有一个Git的存储库,以供开发团队提交他们的代码。然后,Jenkins就从此处开始“接手”。它是一款前端工具,您可以自定义整个工作流或任务。在此,我们的工作就是要确保对特定工具、或特定应用程序,实现持续集成与交付的过程。

从Git的角度而言,Jenkins采取的是“拉代码”的模式,然后Jenkins转向交付阶段,实现从各个分支提交代码。构建阶段主要进行的是代码编译。如果是Java代码,我们可以使用Jenkins中诸如maven之类的工具,来编译代码,并且通过运行一系列测试来实现部署。同样,这些测试案例也都是由Jenkins来进行“监管”的。

之后,代码被转移到缓存服务器上,以便使用Docker来进行部署。最后,在经过一系列单元测试和可用性测试之后,代码“流入”生产环境。 

Docker是一个虚拟环境,我们可以在其中创建服务器。实际上,创建一整台服务器、并部署需要测试的工件也只需要几秒钟的时间。那么我们该如何使用Docker呢?

如前所述,通过存储库,我们不但可以永久性地存储各种镜像,还能几秒钟之内构建出自己的镜像系统,并且运行整个群集。另外,您还可以在任何环境中随时对它们进行按需复制。

动手实践:使用Docker和Jenkins来构建CI/CD管道

步骤 1:在VM中打开终端,使用以下命令启动Jenkins和Docker: 

  1. systemctl start jenkins   
  2. systemctl enable jenkins  
  3. systemctl start docker  

注意:如果系统显示“特权错误(privileges error)”,请在上述命令之前先使用sudo。

步骤 2:在指定端口上打开Jenkins。单击“新建项目”以创建新的作业。 

步骤 3:选择一个自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job1),然后单击确定。 

步骤 4:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。 

步骤 5:然后依次点击构建(Build) -> 选择执行(Execute)Shell。  

步骤 6:逐条输入shell命令。在此,它将通过建立存档文件,来产生一个war文件。之后,它通过“拉”的方式获得相关代码,并且使用maven来安装软件包。注意,它只需安装各个依赖项,并对应用程序进行编译。 

步骤 7:单击“新建项目”,以创建新的作业。 

步骤 8:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job2),然后单击确定。 

步骤 9:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。 

步骤 10:然后依次点击构建(Build) -> 选择执行(Execute)Shell。  

步骤 11:逐条输入shell命令。在此,它将进入集成阶段,并生成相应的Docker容器。 

步骤 12:单击“新建项目”,以创建新的作业。 

步骤 13:选择自由类型(freestyle)项目,并输入项目的名称(此处我使用的是Job3),然后单击确定。 

步骤 14:选择源代码管理(Source Code Management)并点选Git存储库。单击应用并保存(Apply and Save)按钮。 

步骤 15:然后依次点击构建(Build) -> 选择执行(Execute)Shell。 

步骤 16:逐条输入shell命令。在此,它将检查Docker的容器文件,然后将其部署到8180号端口上。请单击“保存”按钮。 

步骤 17:现在依次点击Job1 -> 配置(Configure)。 

步骤 18:单击构建后操作(Post-build Actions) -> 构建其他项目(Build other projects)。 

步骤 19:输入在Job1之后构建的项目名称(此处为Job2),然后单击“保存”。 

步骤 20:现在点击Job2 -> 配置(Configure)。 

步骤 21:单击构建后操作(Post-build Actions) -> 构建其他项目(Build other projects)。 

步骤 22:输入在Job2之后构建的项目名称(此处为Job3),然后单击“保存”。 

步骤 23:现在,我们将创建一个管道的视图。请点击“+”号。 

步骤 24:选择“构建管道视图(Build Pipeline View)”,并输入视图的名称(此处我命名为CI CD Pipeline)。 

步骤 25:选择初始化作业(initialJob,这里我输入了Job1),并单击确定。 

步骤 26:单击“运行(Run)”按钮,以启动CI/CD进程。 

步骤 27:在成功构建之后,请输入localhost:8180/sample.text。它将能够运行该应用程序。 

至此,我们已经了解了如何使用Docker和Jenkins来创建一个CI/CD管道。记住:DevOps的宗旨就是为了能够更快速、更可靠地创建出更高质量的软件,同时也能促进团队之间更密切的沟通和协作。

原文标题:Learn How to Set Up a CI/CD Pipeline From Scratch,作者:Samarpit Tuli 

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

责任编辑:庞桂玉 来源: 51CTO
相关推荐

2022-02-22 09:00:00

软件开发CI/CD 管道工具

2023-02-19 15:28:39

CI/CD 管道集成开发

2021-08-31 09:00:00

开发Azure DevOp集成

2023-01-30 15:55:08

2022-05-19 09:00:00

安全CI/CD工具

2021-07-02 16:30:01

CICDDevOps

2023-05-04 16:03:50

KubernetesCI/CD集成

2020-12-15 16:13:21

DevSecOpsCICD

2023-05-24 16:20:39

DevOpsCI/CD 管道软件开发

2023-04-18 08:17:11

GitLab持续集成

2021-03-23 17:21:48

Java编程开发

2024-11-06 14:40:18

2019-07-25 10:31:55

AWSDevOps架构

2021-01-21 06:06:30

Jenkins分支管道CI

2021-03-31 09:00:00

管道集成工具

2015-10-29 11:35:53

零基础前端设计

2020-06-05 07:20:41

测试自动化环境

2020-10-21 14:10:28

工具测试开发

2021-09-26 09:26:46

开发安全CICD管道

2023-05-09 16:20:54

蓝绿部署CI/CD 管道自动化部署
点赞
收藏

51CTO技术栈公众号