1.前言
在上一篇讲述了如何在CentOS7中安装并使用代码质量管理平台SonarQube6.4,在上一篇中讲到了SonarQube支持多种方式来分析代码质量,其中有一种方式之一就是在持续集成工具中来自动完成代码质量分析,本篇就是继续上一篇来讲述如何安装并使用Jenkins。Jenkins的前身是Hudson,在写作本文时Jenkins的最新版本为2.84.
2.准备
软件准备:
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=48159
3.安装
由于是直接下载的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将文件中内容复制到文本框中然后继续,如下图所示:
这里选择安装建议插件,选择后如下图所示:
这个安装过程视网络情况而定,个人感觉如果是在美国的周末时间会比较快,而在美国的工作日的白天下载速度很超级慢。
建议插件安装完成之后,出现创建管理员的界面,如下图所示:
输入账户信息即可完成Jenkins的安装和第一个管理员的设置。
注意:点击“Continue as admin”链接则跳过管理员设置,管理员账户为“admin”,管理员密码为/root/.jenkins/secrets/initialAdminPassword中的内容;点击“Saveand Finish”则保存当前页面填写的内容。
4.配置
4.1插件配置
Jenkins提供了相当多的插件以支持各种复杂场景,从“Jenkins– 系统管理 – 管理插件”中即可看到已安装和可安装的插件,如下图所示:
为便于演示,这里以本人在开源中国上的git版本库作为演示。
4.2配置MSBuild
为了演示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”一栏中的值。
4.3配置Maven
为了演示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等。
5.检验配置
为了验证我们的配置能够正常工作,这里以刚刚提到的两个项目来验证(其实本来还想提一下.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(通用)、源码管理、构建触发器、构建环境、构建和构建后操作六个部分。充分利用好这几个部分,可以实现很多强大的功能,并且还省了不少精力。
5.1创建Java项目的持续集成项目
在首页点击“新建”链接,如下图所示:
选择“构建一个自由风格的软件项目”,然后填写项目的名称,点击“OK”后出现如下界面:
General部门一般情况下没有太多需要注意的,填写一些用于识别和描述的信息之后即可设置源码管理部分。
Jenkins支持常见的源代码管控系统,如CVS/SVN/Git等。由于示例项目使用了git作为源代码管控工具,所以需要填写相关的信息,如git版本库地址、认证信息、源代码分支信息。第一次使用的时候因为没有版本库认证信息,需要创建,点击“Credentials”旁边的“Add”按钮,如下图所示:
下图是我为开源中国创建的Git认证凭据截图:
在本项目中构建触发器和构建环境中没有特别设置,如下图所示(在某些项目中可能会要求每次提交代码后就编译项目或者每天定时编译项目,都可以在构建触发器中设置):
然后设置构建相关的参数,比如选择我们配置好的Maven及指定Maven的goals,如下图所示:
5.2创建C#项目的持续集成项目
创建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/)。
6.总结
本文讲述了如何使用Jenkins来对项目持续集成,分别以Java和C#两类常见的项目类型做了演示。由于时间关系,仅仅简单讲述了如何配置和创建基本的持续集成项目。其实利用Jenkins除了上面演示的功能之外,还可以在构建完成后将失败或者成功的消息发邮件通知到相关人员,甚至自动部署到服务器(一般是部署到测试环境供QA测试,直接发布到正式服务器还是要慎重一点)。
周金桥
2017/10/15
声明:本文首发于本人个人微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/opensource/186944.html