🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[danger] # Jenkins简介 Jenkins简介 Jenkins自动化部署可以解决集成、测试、部署等重复性的工作,工具集成的效率明显高于人工操作;并且持续集成可以更早的获取代码变更的信息,从而更早的进入测试阶段,更早的发现问题,这样解决问题的成本就会显著下降:持续集成缩短了从开发、集成、测试、部署各个环节的时间,从而也就缩短了中间出现的等待时间;持续集成也意味着开发、集成、测试、部署得以持续。。 使用Maven(Ant)等来实现lava项目自动化构建发布部署。这些工具可以帮助在构建过程中实现自动化发布、回滚等动作。 1、简介 Jenkins是一个用Java编写的开源的持续集成工具。官方网站:https://jenkins.io/ Jenkins能实时监控持续集成过程中所存在的问题,提供详细的日志文件和提醒功能,还能用图表的形式,形象地展示项目构建的趋势和稳定性。 2、特点  易安装:仅仅一个jenkins.war,丛官网下载该文件后,直接运行,无需额外的安装,  更无需安装数据库;  易配置:提供友好的GUI配置界面;  变更支持:Jenkins能从代码仓库(SVN/Git)中获取并产生代码更新列表,并输出到编译输出信息中;  支持永久链接:用户是通过Web来访问Jenkins的,而这些Web页面的链接地址都是永久链接地址,可以在各种文档中直接使用该链接;  集成E-Mail/RSS/M:当完成一次集成时,可通过这些工具实时收取集成结果(构建-次集成需要花费一定时间,有了这个功能,就可以在等待结果过程中,干别的事情);  JUnit/TestING测试报告:也就是用以图表等形式提供详细的测试报表功能;  支持分布式构建:Jenkins可以把集成构建等工作分发到多台计算机中完成;  文件指纹信息:Jenkins会保存构建集成所产生的jars文件、集成构建使用了哪个版; 支持第三方插件:Jenkins支持第三方插件,这使得Jenkins功能变得越来越强大; 3、持续集成(CI) 含义:频繁的(一天多次的)将所有开发者的工作合并到主干上。 持续集成的核心在于确保新增的代码能够与原先代码正确的集成。与后续要介绍的持续交付以及持续部署,其最主要的差别也就在于其目标不同。 不过持续集成的流程还存在一定的异议:上图所示的流程为 Build -> Test,在阮老师的教程里头是 Test -> Build。不过,持续集成本身只不过是一种软件工程的方法或者策略,其并不规定具体的实现。在实际的应用中,还是需要结合具体的开发语言或者工具来定。 持续集成的优势 易于定位错误:每一次的代码集成都需要执行相关的测试工作,持续集成频繁的集成次数天然的将复杂的代码逻辑切割为了小块,也就使得每一次测试中遇到的错误能够更加容易的被定位; 易于控制开发流程:更为细致的工作提交也就意味着更容易判断当前的工作进度,这对于管理者规划开发流程而言提供了一个有效的参考,同时也为开发人员省下了汇报工作的时间; 易于减少不必要的工作:build 以及 test 过程的自动化可以为你节约一大票的时间,从而投入到有价值的工作中去 4、持续交付(CD) 持续交付 指的是:一种能够使得软件在较短的循环中可靠的发布的软件工程方法。 与持续集成相比,持续交付的侧重点在于 交付,其核心对象不在于代码,而在于可交付的产物。由于持续集成仅仅针对于新旧代码的集成过程执行了一定的测试,其变动到持续交付后还需要一些额外的流程。 5、持续部署(CD) 持续部署即在持续交付的基础上,把部署到生产环境的过程自动化。 6、Maven介绍 Maven项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。 Maven除了以程序构建能力为特色之外,还提供高级项目管理工具。由于Maven的缺省构建规则有较高的可重用性,所以常常用两三行Maven构建脚本就可以构建简单的项目。 由于Maven的面向项目的方法,许多Apache Jakarta项目发文时使用Maven,而且公司项目采用Maven的比例在持续增长。 7、传统网站部署流程 在运维过程中,网站部署是运维的工作之一。传统的网站部署的流程大致分为:需求分析->原型设计->开发代码->提交代码->内网部署->内网测试->确认上线->备份数据->外网更新->外网测试->发布完成。如果在内网测试时发现代码有异常,返回代码开发人员名字,调整代码;如果在外网测试时发现外网部署的代码有异常,可以及时进行网站回滚。 ![](https://img.kancloud.cn/2e/ec/2eece86fac884a2ce38e353c86a81b7d_871x441.png) 手动上线步骤: 开发人员发起代码上线的需求(邮件中包含开发做好的WAR包)-)运维人员连接线上负载调度器(Nginx)-->隔离一组服务器(Tomcat)-->连接服务器(Tomcat)-->备份旧代码(tar打包)-->删除旧代码目录-->上传新的WAR包-->外网测试-->测试不通过则通过备份回滚代码-->测试通过则利用rsync的脚本推送代码到其他服务器-->统一外网测试->连接调度器恢复隔离机制-->隔离另一组服务器实施上线步骤-->上线完成。 8、目前主流网站部署流程 通过Hudson/Jenkins工具平台实现全自动部署+测试,是一个可扩展的持续集成引擎,属于开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Jenkins非常易于安装和配置,简单易用。 开发人员:写好代码,不需要自己进行源码编译、打包等工作,直接将代码分支存放在SVI、Git仓库即可。 运维人员:减轻人工干预的错误率,同时解放运维人员繁杂的上传代码、手动备份、更新等操作。 测试人员:可以通过Jenkins进行简单的代码及网站测试 ![](https://img.kancloud.cn/b0/67/b067d611a594d8dbad4da8baabf0f648_853x353.png) 9、Jenkins的工作原理 是先将源代码从SVN/Git版本控制系统中拷贝一份到本地,然后根据设置的脚本进行build(构建)。整个系统的关键就是build脚本,build脚本告诉Jenkins在一次集成中需要执行的任务。 >[danger] ## Windows环境中安装Jenkins 在最简单的情况下,Jenkins 只需要两个步骤: 1、下载最新的版本(一个 WAR 文件)。Jenkins官方网址: [http://Jenkins-ci.org/](http://jenkins-ci.org/) 2、命运行运行 java -jar jenkins.war (默认情况下端口是8080,如果要使用其他端口启动,可以通过命令行”java –jar Jenkins.war --httpPort=80”的方式修改) 注意:Jenkins 需要运行 Java 5以及以上的版本,老版本是war包新版本是msi如果是war包按照上述步骤安装即可,msi直接双击安装。 还有一种安装方式就是将下载的war包文件部署到 servlet 容器,然后启动容器,在浏览器的URL地址栏中输入类似[http://localhost:8080/jenkins/](http://localhost:8088/hudson/)这样的地址即可。下图是安装成功后的界面(使用的是Linux+Tomcat6+Java6环境): ![](https://img.kancloud.cn/66/a5/66a52a10807d9f86347aff824a577939_1400x523.jpg) >[danger]## Jenkins配置 在配置前的一些话:Jenkins的配置不可能全部都说到的,大部分配置是有英文说明的,点击输入框后面的问号就可以看见了。英文不会用翻译工具,多测试几次,你就懂了。 ## 2.1 系统管理 在已运行的Jenkins主页中,点击左侧的系统管理进入如下界面: ![](https://img.kancloud.cn/11/f5/11f5ff2d1a45a0750c384743599ebfb5_555x416.png) ### 2.1.1 提示信息 Ps:版本不同提示的消息有可能不同 ### 2.1.1.1 Utf-8编码 Your container doesn't use UTF-8 to decode URLs. If you use non-ASCII characters as a job name etc, this will cause problems. See [Containers](http://wiki.jenkins-ci.org/display/JENKINS/Containers) and [Tomcat i18n](http://wiki.jenkins-ci.org/display/JENKINS/Tomcat#Tomcat-i18n) for more details. Jenkins建议在tomcat中使用utf-8编码,配置tomcat下conf目录的server.xml文件  ![](https://images0.cnblogs.com/blog/529896/201308/12163628-5e18c80f1c44409fb584a8a618299e12.png) Ps:如果Job的控制台中文输出乱码,请将URIEncoding=”utf-8”更改为useBodyEncodingForURI="true" ### 2.1.1.2 新的版本 New version of Jenkins (1.518.JENKINS-14362-jzlib) is available for download (changelog). 提示有新的版本可以下载了,喜欢更新的点击download去下载吧! ### 2.1.1.3 安全设置 ![](https://img.kancloud.cn/2f/b0/2fb066058fc689540ad27d5c2991e3f8_789x33.png) 詹金斯允许网络上的任何人代表您启动进程。考虑至少启用身份验证来阻止滥用。点击Dismiss忽略该消息,点击Setup Security进入设置界面.详细设置请参考 Configure Global Security(安全设置) 章节 ### 2.1.2 系统设置 在已运行的Jenkins主页中,点击左侧的系统管理—>系统设置进入如下界面: ![](https://img.kancloud.cn/a1/93/a19336ea1c67e65eeaffcca04c3752d9_1399x726.jpg)    ps:jenkins的根目录,默认地在C:\\Documents and Settings\\AAA\\.hudson。 ### 2.1.2.1 JDK、Maven、Ant配置(图为Windows环境) 配置一个JDK、Ant、Maven实例,请在每一节下面单击Add(新增) 按钮,这里将添加实例的名称和绝对地址。下图描述了这两个部分。 ![](https://img.kancloud.cn/11/74/11741d84ed3839bbd463f8f48e3ca726_1021x218.jpg) 点击“安装”,添加相应的设置,如下图: ![](https://img.kancloud.cn/13/80/138036173aefd54a4a5092bda6e7b6f1_1043x558.jpg) JDK别名:给你看的,随便你自己 JAVA\_HOME:这个是本机JDK的安装路径(错误的路径会有红字提示你的) 自动安装:不推荐这个选项 注:Ant、Maven的配置是一样的(JDK去oracle官网下载,Ant与Maven去apache官网下载) Ps:每个文本框后面都有个问号,点击问号就会出现帮助信息 ### 2.1.2.2 邮件通知配置(默认) #### 2.1.2.2.1 配置发件人地址 ![](https://img.kancloud.cn/57/96/5796a4083ca55e337c4ac4708d265f3a_1018x125.jpg) 系统管理员邮件地址(System Admin e-mail address):Jenkins邮件发送地址,切记,必须设置。 #### 2.1.2.2.2 配置邮件通知 ![](https://img.kancloud.cn/5e/7e/5e7e3830c0ddd198677b6c7b63be1331_1009x405.jpg) 设置:SMTP服务器,勾选"使用SMTP认证",输入用户名与密码 Ps:小技巧:用户默认邮件后缀配置了后,以后你填写邮件地址只需要@之前的就行了 ### 2.1.2.3 Subversion配置 ![](https://img.kancloud.cn/ed/d4/edd4e7a24fcc36dfdcbfa6c4da795902_995x135.jpg)   Subversion Workspace Version:Subversion 的版本号,选择你对应的版本号就行了 ### 2.1.3 Configure Global Security(安全设置) 在已运行的Jenkins主页中,点击左侧的系统管理—>Configure Global Security进入如下界面: ![](https://img.kancloud.cn/f9/56/f956f70d011ca415f8ebac09c21bc41f_1010x531.jpg) 设置如上图,保存后系统管理中就出现管理用户的选项。页面右上角也会出现登录/注册的选项。 此设置:只有登录用户可以做任何事 ### 2.1.4 管理用户设置 在右上角点击注册 ![](https://img.kancloud.cn/02/9d/029d027e54ac1093c287df6164fd515d_330x227.png) 点击sign up按钮,提示你现在已经登录.返回首页. 登录后和匿名账号看到的首页有几点不同,如下图红框所示: ![](https://img.kancloud.cn/19/d4/19d4371831f0b53c746233d265f058d9_1398x313.jpg) ### 2.1.5 管理插件设置 建议先阅读[Jenkins插件](http://www.cnblogs.com/zz0412/p/jenkins02.html#_Jenkins%E6%8F%92%E4%BB%B6)章节,在回来安装如下所示的插件。 需求:这个插件将生成的构件(war或者ear)部署到主流的服务器上。 插件名称:[Deploy Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Deploy+Plugin) 插件介绍:This plugin takes a war/ear file and deploys that to a running remote application server at the end of a build ## 2.2 项目构建设置 ### 2.2.1 构建自由风格的Job #### 2.2.1.1 新建自由风格构建任务 在已运行的Jenkins主页中,点击左侧的新建Job进入如下界面: ![](https://img.kancloud.cn/3e/b6/3eb6fedc596e9b36436d5154b047a37f_946x322.png) 这时,需要为新的构建任务指定一个名称。(这里输入的任务名称为:Ant\_test)这里有几种的任务类型可供选择,鉴于初步介绍,先选择构建一个自由风格的软件项目。对于其他的类型,经常使用的是拷贝已存在任务;这主要为了能在现有的任务基础上新建任务。点击OK按钮. **需要注意的是**: 1.Job名称千万不要用中文名称(不作死就不会死)。 2.创建Job名称时最好有个规划,因为我们最后会通过正则匹配自动将Job归类,比如我喜欢 “项目前缀\_一些说明-Job类型”这种方式。 ### 2.2.1.2 构建任务配置 ### 2.2.1.2.1 源码管理配置 演示是使用Subversion的链接,在Repository URL中输入你的项目链接,如果没有权限则会提示如下图: ![](https://img.kancloud.cn/9b/61/9b615b8395daf022bfdf164af9ed7e92_1003x578.jpg)   设置成功后,就直接从SVN此目录获取文件到本地。Ps:要先添加Credentials。添加的方法如下操作: 点击Jenkins首页左侧Credentials,进入页面 ![](https://img.kancloud.cn/f9/66/f966b990ba31b6e24c8cf9724ccf433e_1401x261.jpg) ![](https://img.kancloud.cn/77/ff/77ffb312c08bcd26f27792d9b87c8100_1398x291.jpg) 下一步:一般都是使用的用户名和密码登陆的 ![](https://img.kancloud.cn/51/a4/51a42490b540c89fe0386ba713ec3d24_1398x385.jpg) Ps:svn的用户名和密码设置了是没有办法在web界面修改的。如果要修改则先去Jenkins目录删除hudson.scm.SubversionSCM.xml文件 ### 2.2.1.2.2 构建触发器 在其他项目构建完成后才执行构建:指定的项目完成构建后,触发此项目的构建。 Poll SCM :这是CI 系统中常见的选项。当您选择此选项,您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下您源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写0,15,30,45 \* \* \* \*将使Jenkins每隔15分钟就检查一次您源码仓库的变化。 Build periodically :此选项仅仅通知Jenkins按指定的频率对项目进行构建,而不管SCM是否有变化。如果想在这个Job中运行一些测试用例的话,它就很有帮助。 ![](https://img.kancloud.cn/bf/72/bf72ae20bfc863552d7584a7566a3c29_996x282.jpg) ### 2.2.1.2.3 Ant构建配置 因为我的项目是用ant脚本实现的编译和打包,所以我选择的是Invoke Ant,Ant Version选择你Ant配置的那个名字,注意不要选择default喔,那个选择了没有用。 ![](https://img.kancloud.cn/71/71/71717f431beeb411736ec8fd7c1135cf_1001x247.jpg) Ps:如果你的构建脚本build.xml不在workspace根目录、或者说你的构建脚本不叫build.xml。那么需要在高级里设置Build File选项的路径,指明你的脚本。注意:是相对路径 ## 2.2 监控 当任务一旦运行,您将会看到这个任务正在队列中的仪表板和当前工作主页上运行。这两种显示如下。 ![](https://img.kancloud.cn/4d/98/4d98575caac7383e7e4f2c9929d58d6a_345x125.jpg) ![](https://img.kancloud.cn/4a/03/4a03c0aabc136dd8e92eabf584667288_340x216.jpg) 一旦构建完成后,完成后的任务将会有三个地方进行显示。 你可以在Jenkins的控制面板上看到它,如下图。 ![](https://img.kancloud.cn/d1/79/d179e165f61a0c114265d4e8396e9922_1010x106.jpg) 在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况: 构建状态:下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:  Successful:完成构建,且被认为是稳定的。 Unstable:完成构建,但被认为不稳定。 Failed:构建失败。 Disabled:构建已禁用。 ![](https://img.kancloud.cn/72/2a/722a16da06456a9a822188a1b0ee22d7_269x74.jpg) 构建稳定性: 当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。 ![](https://img.kancloud.cn/68/8a/688adc5f8efd36c308affc705bdf937a_212x71.jpg) 你也可以在当前Job主界面上看到它,如下图左下部分 ![](https://img.kancloud.cn/b9/cd/b9cd150feb7e1f658c804b830632a7a4_1394x548.jpg) 当前作业主页上还包含了一些有趣的条目。左侧栏的链接主要控制Job的配置、删除作业、构建作业。右边部分的链接指向最新的项目报告和构件。 通过点击构建历史(Build History)中某个具体的构建链接,您就能跳转到Jenkins为这个构建实例而创建的构建主页上。如下图 ![](https://img.kancloud.cn/ed/60/ed602861bfa785ce56f1c140b7e8b3fa_1398x314.jpg) 如果你想通过视图输出界面来监控当前任务的进展情况。你可以单击Console Output(控制台输出)。如果工作已完成,这将显示构建脚本产生的静态输出;如果作业仍然在运行中,Jenkins将不断刷新网页的内容,以便您可以看到它运行时的输出。如下图: ![](https://img.kancloud.cn/5c/a9/5ca9bc38c7a66acade39194d517abb7e_1004x625.jpg) >[danger]## Jenkins插件 从Jenkins现有的功能扩展或开发者们为Jenkins提供的新功能都可以称之为Jenkins插件。有些插件可以无缝添加到您的构建过程,而其它,诸如除CVS和Subversion的SCM插件则需要源代码控制系统的支持。 ### 3.1 Jenkins插件安装 Jenkins 插件管理器允许您安装新的插件,和更新您Jenkins服务器上的插件。管理者将连接到联机资料库,检索可用的和已更新的插件。如果您的Jenkins服务器 无法直接连接到外部资源,您可以从Jenkins网站上下载。 在已运行的Jenkins主页中,点击左侧的系统管理—>管理插件进入如下界面: ![](https://img.kancloud.cn/70/9a/709a146f4534c7ddbcdb81aa2f37bf86_1019x613.jpg) 它包含四个标签: 更新:清单中列示了Jenkins为某些插件搜索到了可用的更新。列出的每个插件可以被选择并应用更新。 可选安装:清单中列示了可用于安装(而不是目前已安装的)的所有插件。列出的每个插件都可以被选择并安装。 已安装:清单中列示了已经安装的插件。 高级:允许您通过设定HTTP代理的方式使Jenkins与在线插件库建立连接。此外,还提供了一个上传设备,可以安装你在Jenkins以外已下载的那些插件。 由上图可知,Jenkins缺省集成了maven2插件,并且一旦插件有新版本,会提示更新新版本插件。 如果想安装新的插件,可以点击tab分页中的可选插件。如下图: ![](https://img.kancloud.cn/f7/a4/f7a4cd194584217f6a59818c6f456cc1_896x605.png) 从图可知,各种Jenkins插件根据之前所记述的类型进行分门别类。可勾选任意想安装的Jenkins插件,点击Install without restart按钮进行安装。安装后,所有插件以hpi作为后缀名放置在plugins文件夹下。如果是高级用户还可以自行开发插件方便具体项目使用。 注意:安装完成后需要重启Jenkins部署的容器。这样才能使用新装的插件。 ### 3.2 Jenkins插件安装示例 Jenkins运行自动部署war包到servlet容器内,要实现这个功能必须安装一个插件。 ![](https://img.kancloud.cn/f7/a4/f7a4cd194584217f6a59818c6f456cc1_896x605.png) ![](https://img.kancloud.cn/96/f9/96f9e8963f171b737facb38d1864ebd9_392x254.png) 下面附上完整的用户手册供大家参考 https://www.jenkins.io/zh/doc/