jenkins1:基础知识

一. CI/CD是什么

我们的代码就像是一只小熊玩具,需要不断的完善,比如给它加上帽子,加个眼镜等等。

如果将上面的例子实现出来,是下面这么一个流程,这个过程称之为持续集成

这个过程,是将个人的代码,集成到主干。其中任何一个步骤出错,结果都会很难受,比如我们自己的代码有问题(帽子出现了裂痕),或者是集成到主干时出现了问题(把帽子戴错地方)。

值得庆幸的是,由于持续集成的机制,程序员会非常迅速的发现bug,同时避免了分支偏离过多(如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成),这就像是有一个产品医生,随时检测代码的质量。 

在持续集成之后,是持续交付,它的作用是频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代码就进入生产阶段。

持续交付是以持续集成为基础,将集成后的代码部署到更贴近真实运行环境的类生产环境中。

在持续交付之后,是持续部署,这是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。持续部署的前提是能自动化完成测试、构建、部署等步骤。

上面这个图是软件开发的主要流程,我们称之为:CI/CD

二. jenkins是什么

上面讲了CI/CD,那它和jenkins有什么关系?要想知道这个问题,你首先要理解jenkins:基于web界面的持续集成和持续交付工具。jenkins的目的是实现持续集成和交付,它集合了有很多插件。jenkins就是一个便签框,而它的插件就是便签。

便签框中的便签就是常用的插件,比如java,git,tomcat等等。

而jenkins就是驱动这些插件,来实现获取源码,打包,部署等等,下面的图形象地展示了这一过程。

三. jenkins怎么用

首先需要个项目

使用jenkins的前提是你要有源码,利用下面这个Demo:https://github.com/yuruotong1/rest_assured.git

这是一个rest-assured的项目,使用maven来构建,它用来判断雪球网站搜索的返回结果是否符合预期,代码如下:

有三点需要注意,一:请求参数是code:sougou,这意味着我们要在雪球网上获得sougou相关信息;二:get中是请求的url地址;三:最后的body里面是对返回内容的校验。这里不必关心项目结果,在本地运行结果如下:

如果大家对rest-assured不熟悉的话,可以先看我的另一篇文章:https://testing-studio.com/archives/2295

利用三板斧构建项目

那么我们如何在jenkins上构建这个项目呢?你需要如下三板斧:配置环境,创建项目,构建。

第一板斧:环境

jenkins安装方法有很多,无论你是直接安装还是docker下部署,都可以方便且简单的配置好,具体安装大家自行搜索。这里的环境是指jenkins中需要哪些设置,由于我使用的项目是maven项目,所以,我的jenkins上需要有jdk和maven,打开Manage jenkins->Global Tool Configuration,然后按照下面的动图来设置jdk和maven,选项中的自动安装,表示jenkins会从网络上下载jdk和maven。

第二板斧:创建项目

配置好环境,我们就可以将github上的项目部署到jenkins上,jenkins会自动编译,最后我们将得到编译后的war包,点击New Item -> Maven project,在弹出的配置界面选择git,在其中输入项目地址,输入完成后我们点save

第三板斧:构建

点击save后,会出现下面界面,在这里,你可以找到构建按钮,让我们点击它以开始构建。

从结果可以看到,jenkins成功的帮我们构建了项目,但这只是表象,我们并没有看到构建成功后生成的jar包,要在哪才能找到它呢?

当项目构建成功后,你就可以在jenkins->workspace->[项目名]->target下找到jar包了,如下图所示:

三板斧做了什么

不知你是否还记得jenkins的工作流程,上面操作的三板斧,完成了获取源码打包两个动作,这个非常简单的例子让我们做到了持续集成:当我们的源码有变动时,只需要点击构建,就可以得到更新好的jar包,怎么样,这样是不是非常方便!

有同学会问,上面图中明明是war包,而你的项目生成的是jar包,这两个有什么区别呢?是这样的,所谓的jar包和war包,都是压缩包,由于打包对象不同,也就取了不同的名子,宽泛来讲:

  1. jar包组成:通用类,由很多类文件组成。
  2. war包组成:web模块,由类文件,网站html,jsp等等。

war包解压缩后可以直接运行,比如tomcat就可以对war包解压执行,我们称这个过程为部署,而jar包不可以直接运行,只能依靠java命令运行。

看到这,你是不是就理解为什么这个项目只能持续集成,不能持续部署了吧,因为我们用的项目不是java web。

四. 总结

本文章利用一个小的demo,在本地演示了持续交付,但你一定对jenkins复杂的环境和配置感到头大,并且,它在实际的工作环境也要复杂的多,需要远程主机,需要持续部署,还有自动构建(比如当github上的代码更新时,自动构建)等等,我称以上为进阶操作,这些内容我会在下一篇文中详细介绍!本文只是让你理解jenkins的运行原理。

更多

霍格沃兹测试学院官网首页:https://testing-studio.com