使用jenkins实现持续集成
4.2 建立项目4.2.1 新建项目
下面以建立一个自由风格软件项目为例进行说明
[*]点击左侧边栏的“新建”按钮,新建一个任务。
[*]填写项目的名称,并选择一种构建的方式,此时我们选择第一个,构建一个自由风格的软件项目,然后点击“OK”按钮创建任务,并进行详细的配置
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716160850519-1650103209.png 然后就会进行到下面这个配置页面
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716160935878-992287442.png
接下来,我从General、源码管理、构建触发器、构建环境、构建、构建后操作这几个部分来进行详细配置说明
4.2.2 General
这部分主要是设置下名称、工作空间等。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161034222-53368878.png
第一步,点击高级按钮;
第二步,勾选“自定义工作空间”,输入工作空间路径;
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161159160-1872856235.png
若是只有一个项目,也可以直接到“系统管理>系统配置>工作空间目录”直接修改默认工作空间目录,如下图:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161220847-1522363124.png
4.2.3 源码管理
因为,我们的代码是部署在SVN服务器上的,所以这里有下面三个步骤来配置jenkins监控SVN服务器代码变化。
第一步,选择Subversion;
第二步,在Repository URL输入项目SVN地址;
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161314050-1040331419.png
第三步,在Credentials选择SVN用户名和账号,初次会需要点击Add添加,如下。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161341050-664320142.png
4.2.4 构建触发器
指定的项目完成构建后,触发此项目的构建。
[*]Poll SCM:当选择此选项,您可以指定一个定时作业表达式来定义Jenkins每隔多久检查一下源代码仓库的变化。如果发现变化,就执行一次构建。例如,表达式中填写H 2 * * *将使Jenkins每隔2分 钟就检查一次源码仓库的变化。
[*]Build periodically:此选项仅仅通知Jenkins按指定的频率对项目进行构建,而不管SCM是否有变化。如果想在这个Job中运行一些测试用例的话,它就很有帮助。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716161853144-1435846665.png
4.2.5 构建环境
略
4.2.6 构建
这部分主要是配置构建的相关内容,用于定时触发构建或者手动执行构建的时候,对代码检验、编译时进行的操作。构建概念到处可查到,形象来说,构建就是要把代码从某个地方拷贝过来,编译,再拷贝到某个地方去等等操作,当然不仅与此,但是主要用来干这个。
因为我的项目是用ant脚本实现的编译和打包,所以我选择的是Invoke Ant,Ant Version选择我Ant配置的那个名字(这里可以参见3.4.2),注意不要选择default喔,那个选择了没有用。
[*]增加构建步骤:Invoke Ant
[*]Targets:(什么也没写,默认执行根目录下的build.xml)
如果你的构建脚本build.xml不在workspace根目录、或者说你的构建脚本不叫build.xml。那么需要在高级里设置Build File选项的路
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162022285-1737582130.png
build.xml配置文件请查看附件“build.xml说明”,里面有每句配置说明;
checkstyleBuild.xml配置文件请查看附件“checkstyleBuild.xml说明”,里面有每句配置说明;
findBugsBuild.xml配置文件请查看附件“findBugsBuild.xml说明”,里面有每句配置说明。
4.2.7 构建后操作
用于定义当前项目构建完之后的一些操作,比如构建完之后将checkstyle结果输出到指定日志文件,重新发布项目,去执行其他项目构建等。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162207113-850922877.png4
4.2.7.1 构建后发布项目
注意,首先你必须安装好Deploy Plugin插件,然后在tomcat的conf目录配置tomcat-users.xml文件,如我这里配置的是manager, 在<tomcat-users>节点里添加如下内容:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162406394-2105747705.png
配置完之后一次war包路径、用户名、密码、主机即可
配置完之后一次war包路径、用户名、密码、主机即可
参数说明:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162511878-1693704711.png
[*]l WAR/EAR files:war文件的存放位置,如:**/build/warDest/ad-gx-admin.war。
[*]l Context path:访问时需要输入的内容,如ad-gx-admin访问时如下: http://172.16.4.166:10001/ ofCard/ad-gx-admin如果为空,默认是war包的名字。
[*]l Container:选择你的web容器,如tomca 7.x
[*]l Manager user name:填入tomcat-users.xml配置的username内容
[*]l Manager password:填入tomcat-users.xml配置的password内容
[*]l Tomcat URL:填入http://192.168.x.x:8080/
[*]l Deploy on failure:构建失败依然部署,一般不选择
注意:虽然这种部署方法可能会导致tomcat加载时出现卡死的现象。但是也是最简单的部署方式。如果卡死了重启下就好了,将tomcat的java内存参数调高可以解决这个问题。
最后不要忘记点击保存喔。
好了!到此一个项目的获取源码,打包,远程部署
4.2.7.2构建后发布静态结果
输入配置文件
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162445566-315786576.png
https://images2015.cnblogs.com/blog/847059/201707/847059-20170716162511878-1693704711.png
checkstyle-result.xml配置文件请查看附件“checkstyle-result.xml说明”,里面有配置说明。
所有这些配置多做完之后,在最下方点击“保存”按钮,现在回到首页去进行构建吧!!!
4.3 监控
4.3.1 主页面介绍
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184406503-1744205535.png
1、左边菜单栏
[*]l 新建:这里进入新建项目。
[*]l 用户:用户管理模块,对监控系统用户的增删改查。
[*]l 任务历史:以往构建过的项目。
[*]l 系统管理:进去是一些配置方面的东西,进入之后几个主要的子菜单分别是系统设置 、Global Tool Configuration 、管理插件 几个模块
[*]l My Views:当前监控的项目列表。
[*]l Credentials:添加监控源码的的证书,其实就是SVN用户名和密码验证。
2、监控项目列表
这里主要是Jenkins当前正在监控的项目列表。点击进去可查看当前项目详细情况。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184427503-815120918.png
模块1:
[*]l 状态:最后一次构建的状态;
[*]l 修改记录:代码修改记录;
[*]l 工作空间:编译后代码存放的目录;
[*]l 立即构建:单击此处,可立即进行构建;
[*]l 删除Project:单击此处,可删除该项目;
[*]l 配置:配置该项目相关监控信息(工作空间、chestyle规则等);
[*]l Checkstyle Warnings:当前这次构建发现的静态警告;
[*]l FindBugs Warnings:当前这次构建发现的FindBugs。
模块2:
[*]这里显示的最近一次构建的相关信息,是否构建成功、构建用时等。
模块3:
[*]l Checkstyle Trend:历史构建完之后的解决的代码中静态警告走势;
[*]l FindBus Trend:历史构建完之后的解决的代码中FindBugs走势。
4.3.2 构建状态查询
当任务一旦运行,您将会看到这个任务正在队列中的仪表板和当前工作主页上运行。这两种显示如下。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184506628-497720938.pnghttps://images2015.cnblogs.com/blog/847059/201707/847059-20170717184510988-380153823.png
一旦构建完成后,完成后的任务将会构建历史列表显示。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184524300-1439112462.png
当然你可以在Jenkins的主控制面板上看到它,如下图。
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184604081-115536023.png
在上面展示的截图中,您将注意到有两个图标描述当前作业的状态。S栏目代表着“最新构建状态”,W栏目代表着“构建稳定性”。Jenkins使用这两个概念来介绍一个作业的总体状况:
1、构建状态:
下图中分级符号概述了一个Job新近一次构建会产生的四种可能的状态:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184635628-2001157301.png
[*]Successful:完成构建,且被认为是稳定的。
[*]Unstable:完成构建,但被认为不稳定。
[*]Failed:构建失败。
[*]Disabled:构建已禁用。
2、构建稳定性:
当一个Job中构建已完成并生成了一个未发布的目标构件,如果您准备评估此次构建的稳定性,Jenkins会基于一些后处理器任务为构建发布一个稳健指数 (从0-100 ),这些任务一般以插件的方式实现。它们可能包括单元测试(JUnit)、覆盖率(Cobertura )和静态代码分析(FindBugs)。分数越高,表明构建越稳定。下图中分级符号概述了稳定性的评分范围。任何构建作业的状态(总分100)低于80分就是不稳定的。
当前作业主页上还包含了一些有趣的条目。左侧栏的链接主要控制Job的配置、删除作业、构建作业。右边部分的链接指向最新的项目报告和构件。
通过点击构建历史(Build History)中某个具体的构建链接,就能跳转到Jenkins为这个构建实例而创建的构建主页上。如下图:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184710628-151247347.png
如果你想通过视图输出界面来监控当前任务的进展情况。你可以单击Console Output(控制台输出)。如
果工作已完成,这将显示构建脚本产生的静态输出;如果作业仍然在运行中,Jenkins将不断刷新网页的内容,以便您可以看到它运行时的输出。如下图:
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184736503-1575925022.png
五、常见错误处理
5.1 java.lang.UnsupportedClassVersionError
这是因为jenkins和jdk版本不对应引起的。我这里用的是jdk1.7,所以下载版本http://pkg.jenkins-ci.org/redhat/jenkins-2.33-1.1.noarch.rpm(jenkins下载地址:http://pkg.jenkins-ci.org/redhat/), 原先现在2.5版本以上,版本太高,启动报“java.lang.UnsupportedClassVersionError”错,所以要卸载之前安装的jenkins-2.54-1.1.noarch,使用如下命令
5.2 command execution failed.Maybe you need to configure the job to choose one of your Ant installations?
“
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717184850097-1513538503.png控制台输出
Started by user admin
- Loading node environment variables.
Building in workspace /home/jenkins/workspace/My_cache
Updating https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache at revision '2017-07-17T14:14:11.377 +0800'
Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’
At revision 68144
No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build
$ ant -file checkstyleBuild.xml -DBUILD_NUMBER=8
ERROR: command execution failed.Maybe you need to configure the job to choose one of your Ant installations?
Skipping publisher since build result is FAILURE
Skipping publisher since build result is FAILURE
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered
Finished: FAILURE
”
这是由于没有成功全局配置ant的环境变量没有配置成功导致,请确保环境Ant环境变量配置成功,并且在Global Tool Configuration正确添加了Ant的路径,这个可以参见2.2及3.4.2
5.3JAVA_HOME is not defined correctly.
“
https://images2015.cnblogs.com/blog/847059/201707/847059-20170717185032800-1945978892.png控制台输出
Started by user admin
- Loading node environment variables.
Building in workspace /home/jenkins/workspace/My_cache
Updating https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache at revision '2017-07-17T15:33:26.714 +0800'
Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’
At revision 68151
$ /home/lutong/apache-ant-1.9.9/bin/ant -file checkstyleBuild.xml -DBUILD_NUMBER=11
Error: JAVA_HOME is not defined correctly.
We cannot execute java
Build step 'Invoke Ant' marked build as failure
Skipping publisher since build result is FAILURE
Skipping publisher since build result is FAILURE
Warning: you have no plugins providing access control for builds, so falling back to legacy behavior of permitting any downstream builds to be triggered
Finished: FAILURE
”
这是由于没有成功全局配置JDK的环境变量没有配置成功导致,请确保环境Ant环境变量配置成功,并且在Global Tool Configuration添加的JDK路径正确,这个可以参见2.4.1及3.4.3
5.3 Unable to access the repository
在配置“源码管理”时,如果Credentials 不选择或者选择了验证不正确,会出现这个错误,请参见3.4.4及4.2.3
5.4 can’t create file
“
Checking out https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache at revision '2017-07-17T17:46:17.618 +0800'
Using sole credentials hehaitao/****** in realm ‘<https://ip地址:443> VisualSVN Server’
ERROR: Failed to check out https://ip地址/svn/iptv/新业务/广西开机广告/code/ad-gx-cache
org.tmatesoft.svn.core.SVNException: svn: E204899: Cannot create new file '/home/jenkins/workspace/广西开机广告/.svn/lock': 权限不够
No changes for https://ip地址/svn/iptv/%E6%96%B0%E4%B8%9A%E5%8A%A1/%E5%B9%BF%E8%A5%BF%E5%BC%80%E6%9C%BA%E5%B9%BF%E5%91%8A/code/ad-gx-cache since the previous build
”
这是由于 项目“广西开机广告”目录的权限不够,使用“chmod777 /home/jenkins/workspace/广西开机广告 ”即可
附件:
附件一:build.xml说明
https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifView Code
附件二:checkstyle-result.xml说明
https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gifhttps://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif
<?xml version="1.0" encoding="UTF-8"?>
<project name="checkstyle" default="checkstyle" basedir="."> <!-- 检查源码的路径 -->
<target name="init">
<tstamp/>
<!-- 输出报告的路径-->
<property name="project.dir" value="/home/jenkins/workspace/广西开机广告项目/checkstyle_report"/>
<property name="project.checkstyle.report.dir" value="${project.dir}/${BUILD_NUMBER}"/>
<property name="project.checkstyle.result.name" value="checkstyle-result.xml"/>
<property name="project.checkstyle.report.name" value="checkstyle-report.html"/>
<!-- 检测规则存放路径-->
<property name="checkstyle.config" value="/home/jenkins/workspace/checkstyle.xml"/>
<property name="checkstyle.report.style" value="/var/lib/jenkins/plugins/checkstyle/WEB-INF/lib/checkstyle-frames.xsl"/>
<property name="checkstyle.result" value="${project.checkstyle.report.dir}/${project.checkstyle.result.name}"/>
<property name="checkstyle.report" value="${project.checkstyle.report.dir}/${project.checkstyle.report.name}"/>
<mkdir dir="${project.checkstyle.report.dir}"/>
</target>
<taskdef resource="checkstyletask.properties">
<target name="checkstyle"depends="init" description="check java code and report." >
<checkstyle config="${checkstyle.config}"failureProperty="checkstyle.failure"failOnViolation="false">
<formatter type="xml" tofile="${checkstyle.result}" />
<fileset dir="/home/jenkins/workspace/广西开机广告项目" includes="**/*.java" /> <!-- 检查源代码的存放路径 -->
</checkstyle>
<!--<style in="${checkstyle.result}" out="${checkstyle.report}" />
通过指定的xsl模版文件生成一份html的报告,这里生成的文件用于邮件发送时附加上,另外Jenkins插件也会生成可视化的结果-->
</target>
<target name="xml2html" depends="checkstyle">
<!-- 将生产结果根据扩展样式表文件checkstyle-frames.xsl生成html页面,输出到html -->
<xslt in="${checkstyle.result}" out="${checkstyle.report}">
</xslt>
</target>
</project>
View Code
页:
[1]