在上一篇讲述了如何在CentOS7中安装并使用代码质量管理平台SonarQube6.4,在上一篇中讲到了SonarQube支持多种方式来分析代码质量,其中有一种方式之一就是在持续集成工具中来自动完成代码质量分析,本篇就是继续上一篇来说述如何安装并使用Jenkins。Jenkins的前身是Hudson,在写做本文时Jenkins的最新版本为2.84.git
软件准备:apache
jenkins.war:Jenkins的部署文件,下载地址:http://mirrors.jenkins.io/war/2.84/jenkins.war浏览器
Microsoft Build Tools 2015:无需安装VisualStudio,仅安装本软件便可使用MSBuild来编译Visual Studio建立的项目文件或解决方案文件,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=48159tomcat
因为是直接下载的war文件,因此无需编译,只需将其放在Java的Web容器下便可。因在本系列中已经安装配置过Tomcat8.5,而且Tomcat的工做路径为:/usr/local/apache-tomcat-8.5.15/,所以jenkins.war放入/usr/local/apache-tomcat-8.5.15/文件夹,而后在浏览器中访问便可。服务器
本人的CentOS7虚拟机IP为192.168.60.198,所以在外部能够经过网址http://192.168.60.198/jenkins/访问,如下是访问界面:微信
打开/root/.jenkins/secrets/initialAdminPassword将文件中内容复制到文本框中而后继续,以下图所示:网络
这里选择安装建议插件,选择后以下图所示:maven
这个安装过程视网络状况而定,我的感受若是是在美国的周末时间会比较快,而在美国的工做日的白天下载速度很超级慢。ide
建议插件安装完成以后,出现建立管理员的界面,以下图所示:工具
输入帐户信息便可完成Jenkins的安装和第一个管理员的设置。
注意:点击“Continue as admin”连接则跳过管理员设置,管理员帐户为“admin”,管理员密码为/root/.jenkins/secrets/initialAdminPassword中的内容;点击“Saveand Finish”则保存当前页面填写的内容。
Jenkins提供了至关多的插件以支持各类复杂场景,从“Jenkins– 系统管理 – 管理插件”中便可看到已安装和可安装的插件,以下图所示:
为便于演示,这里以本人在开源中国上的git版本库做为演示。
为了演示Jenkins对.NET项目的支持,这里我在开源中国上建立了一个.NET项目,网址是:https://gitee.com/zhoufoxcn/GoodAppCodeMaker.git,若是持续集成项目中有.NET项目,建议在Windows上安装Jenkins。安装过程和在CentOS7上同样。
点击在上一张图片中所示的“全局工具配置”连接,找到MSBuild节点,以下图所示:
我使用的VS2015,因此MSBuild的版本是14.0。若是不想完整安装Visual Studio,能够安装MSBuild Tool,在这里我安装的就是Microsoft Build Tools 2015,下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=48159
安装后的路径就是C:\Program Files (x86)\MSBuild\14.0,MSBuild.exe所在路径为:C:\ProgramFiles (x86)\MSBuild\14.0\Bin,也就是上图中“Path to MSBuild”一栏中的值。
为了演示Jenkins对Java项目的支持,在这里使用我在开源中国上的一个项目,网址是:https://gitee.com/zhoufoxcn/CodeGenerator.git,这个Java项目使用了Maven。因此须要下载Maven,下载网址为:http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.0/binaries/apache-maven-3.5.0-bin.tar.gz,将下载下来的压缩包文件解压到一个路径下,而后记住这个路径,下面立刻会用到。
点击在上一张图片中所示的“全局工具配置”连接,找到Maven节点配置相关信息,以下图所示:
上图中“MAVEN_HOME”一栏的值即为解压后Maven的路径。搞过Java的朋友都知道,Java中会常用环境变量存储一些工做路径,如JAVA_HOME、CLASSPATH、CATALINA_HOME等。
为了验证咱们的配置可以正常工做,这里以刚刚提到的两个项目来验证(其实原本还想提一下.net core2.0的项目的,这类项目能够在Linux下运行,后来想一想和Java项目相似就没有再啰嗦了)。
两个示例项目的git版本库地址:
CodeGenerator :https://gitee.com/zhoufoxcn/CodeGenerator.git,使用了Maven的Java项目。
GoodAppCodeMaker :https://gitee.com/zhoufoxcn/GoodAppCodeMaker.git,使用VS2010开发的C#项目。
建立一个持续集成项目分General(通用)、源码管理、构建触发器、构建环境、构建和构建后操做六个部分。充分利用好这几个部分,能够实现不少强大的功能,而且还省了很多精力。
在首页点击“新建”连接,以下图所示:
选择“构建一个自由风格的软件项目”,而后填写项目的名称,点击“OK”后出现以下界面:
General部门通常状况下没有太多须要注意的,填写一些用于识别和描述的信息以后便可设置源码管理部分。
Jenkins支持常见的源代码管控系统,如CVS/SVN/Git等。因为示例项目使用了git做为源代码管控工具,因此须要填写相关的信息,如git版本库地址、认证信息、源代码分支信息。第一次使用的时候由于没有版本库认证信息,须要建立,点击“Credentials”旁边的“Add”按钮,以下图所示:
下图是我为开源中国建立的Git认证凭据截图:
在本项目中构建触发器和构建环境中没有特别设置,以下图所示(在某些项目中可能会要求每次提交代码后就编译项目或者天天定时编译项目,均可以在构建触发器中设置):
而后设置构建相关的参数,好比选择咱们配置好的Maven及指定Maven的goals,以下图所示:
建立C#的持续集成项目和建立Java的持续集成项目没有太大的区别,好比在源代码管理部分除了git版本库URL不同以外,重用了身份凭据信息,以下图所示:
此外,由于编译Java和C#两种不一样语言的项目方式不一样,因此在构建节点有些不太同样。在这里选择的是MSBuild,同时须要制定编译时的项目文件,基于解决方案或是基于项目编译都可,本人这里选择是编译整个解决方案,即“MSBuild Build File”来指定,同时用“Command Line Arguments”来指定编译时的参数,这个能够在命令行下查看MSBuild支持哪些参数,分别有什么意义。
至此,建立了两个持续集成项目,在系统开始页面便可看到刚刚建立的项目,点击最右侧的图标便可当即构建项目。
这里须要说明的是若是C#项目使用了NuGet或者Java项目使用了Maven,请确保安装了Jenkins的服务器可以下载项目引用的dll或者Jar,不然会构建失败。
点击Jenkins系统左侧的“任务历史”连接,能够查看历次以来的构建状况,以下图所示:
若是某次编译出戳,能够点击该次构建右侧的图标查看控制台输出(上图中用红色箭头标识),界面以下图所示:
看上图就是由于Maven没有配置好致使没法编译。
另外,在Linux中/{User_Name}/.jenkins/这个目录会保存不少Jenkins的一些中间过程信息(若是在Windows系统中则为C:\Users\{User_Name}\.jenkins\,{User_Name}为登陆到系统中的名字),好比在Jenkins中迁出后会保存到/{User_Name}/.jenkins/workspace/中(Windows中对应为C:\Users\{User_Name}\.jenkins\workspace\),若是是jar或者exe文件可将其复制到/{User_Name}/.jenkins/userContent/中(Windows中对应为C:\Users\{User_Name}\.jenkins\userContent\),这样虚拟机就能够经过http://192.168.60.168:8080/jenkins/userContent/来访问(虚拟机内部则为:http://localhost:8080/jenkins/userContent/)。
本文讲述了如何使用Jenkins来对项目持续集成,分别以Java和C#两类常见的项目类型作了演示。因为时间关系,仅仅简单讲述了如何配置和建立基本的持续集成项目。其实利用Jenkins除了上面演示的功能以外,还能够在构建完成后将失败或者成功的消息发邮件通知到相关人员,甚至自动部署到服务器(通常是部署到测试环境供QA测试,直接发布到正式服务器仍是要慎重一点)。
周金桥
2017/10/15
声明:本文首发于本人我的微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。