持续集成(CI)是一种实践,旨在缓和和稳固软件的构建过程。持续集成最早由Martin Fowler 于10年前已经提出,希望通过持续集成能够实现以下过程:
Ø 任何人在任何地点,任何时间可以构建整个项目。
Ø 在持续集成构建过程中,每一个单元测试都必须被执行。
Ø 在持续集成构建过程中,每一个单元测试都必须通过。
Ø 持续集成构建的结果是可以发布的软件包。
Ø 当以上任何一点不能满足时,整个团队的主要任务就是去解决这个问题。
Jenkins是一个软件界非常流行的开源CI服务器,下面主要做一些基础介绍。
首先从http://Jenkins-ci.org/下载Jenkins的安装版本。双击安装文件进行安装(不推荐jar包形式安装);
另外,还需要下载jdk的安装包,建议1.5以上版本;
1) 环境变量的设置(斜体为必选项):
a) JAVA_HOME,设置JDK的安装目录,建议采用JDK1.5以上
b) ANT_HOME,设置Ant的目录,建议采用ant最新版本1.8
c) JENKINS_HOME,设置Jenkins的配置文件目录,默认为用户的目录,建议为Jenkins的安装目录,便于控制;
d) PATH,需要将java、ant的目录配置到path目录下;
e) CLASSPATH,需要将JDK的tools.jar配置到CLASSPATH下;
2) 其他外部条件(非必要)
a) 需要WebLogic923的远程控制的jar文件,文件有weblogic_sp.jar、weblogic.jar、webservices.jar三个jar文件,这三个文件位于WebLogic安装目录的相对目录server\lib下;
b) 将上述三个jar配置到系统的CLASSPATH环境变量中;
1)对于Jenkins.war安装的情况,可以有两种方法进行运行Jenkins;
a) 直接通过命令行
转到Jenkins.war所在的目录,当前为D:\Jenkins
java -jar Jenkins.war --httpPort=8080 –prefix=Jenkins
说明:httpPort为Jenkins运行的端口,默认端口为8080,上述命令其实Jenkins运行在Winstone容器中;
b) 在Web容器中运行
Jenkins可以运行在标准的Web服务器中,支持Tomcat、Jboss、WebLogic中,只需要将Jenkins.war放置到相应目录,启动服务就可以进行访问;
2)对于服务形式安装的jinkens,默认开机后直接在地址栏输入http://localhost:8080即可进入其主页;
验证Jenkins是否运行正常,通过访问http://hostIP:port/Jenkins即可。
Jenkins的基本设置都在系统的后台设置中,类似于Windows的控制面板。
可以在这里进行ANT_HOME设置,假如系统已经设置了ANT_HOME,可以不需要再进行配置,同时可以让Jenkins安装一个最新的ANT。
备注:为了让配置更加简单,建议在系统级设置JAVA_HOME和ANT_HOME,便于系统的迁移。
系统能够在执行计划完成后发送结果邮件,需要配置邮件服务器的相关信息:
上面还需要配置Jenkins的URL地址,作为后期访问地址,一旦设定URL,就不要轻易修改。
在Jenkins主菜单点击“新建任务”,出现下图:
键入任务名称,选择“构建一个自由风格的软件项目”选项,点击“OK”按钮后,出现下面的界面:
说明:
a) 项目名称(Projectname):项目(任务)名称不能重复,后面通称任务;
b) 描述(Description):,主要对任务进行简要说明;
c) 丢弃旧的构建(Discardold builds):是否保留过去的构建,默认是保留。(帮助:这里控制着您想要在Jenkins所在的磁盘把构建记录存储的有效期(诸如控制台输出、编译构件等等)。Jenkins为此提供了两个标准:1。时间驱动。在Jenkins中您可以判断如果达到一定时限来删除一条记录(例如,七天前)。2。数量驱动。在Jenkins中您可以确保它拥有N份构建。如果又有新的构建开始,最早的那份(记录)就将被删除。Jenkins也可以让您建立的个别构建定义为'永远保持这个记录',以便防止某些重要的构建被自动丢弃。)
d) 参数化构建过程(Thisbuild is parameterized): 如果选择此选项,Jenkins将允许您提供一套任意的键值对参数,它们会被传递到构建过程里。配置的参数往往是构建运行环境中的一些环境变量。(帮助:当您使用了Jenkins的各种自动化,有时要求在构建过程中提供一组用户的输入,使用“parameterize”就能够更方便构建。例如,您可能会设立一个按需测试,在那里用户可以提交一个二进制文件的压缩文件来进行测试。
e) 关闭构建(DisableBuild):禁止此任务进行构建,默认是不禁止;
f) 在必要时并发构建(Executeconcurrent builds if necessary)
g) Advanced Project Options
1) Quiteperiod:构建前等待时间;
2) RetryCount:从SCM仓库中取出尝试时间;
3) Blockbuild when upstream project is building:假如上一个仍在构建过程中,停止本次构建任务;
4) Usecustom workspace:指定当前任务的workspace,否则默认为JENKINS_HOME的工作目录
h) Source Code Management:指定编译源代码的获取方式:
1) None:手动方式;
2) Git:从Git仓库中获取;
3) SVN:从SVN仓库中获取;
a) Builds Triggers:设置构建触发器
1) 触发远程构建
2) Buildafter other projects are built:设置构建的流水线,配置在设置的任务构建完成后自动构建此任务,进行设置后,可以在任务统揽中看到以下“下游项目说明”(操作步骤略)
1) Build peridically
2) Github hook trigger builds remotely (e.g., fromscripts):设置远程触发进行任务构建;
3) Build periodically:设置构建频率,设置跟QuartzCronTrigger设置雷同;
4) PollSCM:设置从SCM库中检查源代码是否更新:
备注:关于第五和第六两点,基本配置为
分钟 小时 天 月 星期
举例: 每分钟进行集成 * * * * *, 每5分钟进行集成5 * * * *,每天12点和23整点进行集成 0 12,23 * * *
a) Build Environment:设置构建环境设置
1) Deleteworkspace before build starts
2) Abortthe build if it`s stuck
3) Addtimestamps to the Console Output
4) Usesecret text(s) of file(s)
b) Build:执行构建
构建支持6种方式,shell(运行于Linux环境)、Maven(支持Maven编译)、Command(windows批处理命令)、Ant、EasyAnt、Export job runtime parameters。
举例:
1) InvokeAnt:
备注:
Ø Targets主要是执行ant脚本中哪几个部分,可以添加多个;
Ø BuildFile:需要指定Ant脚本的物理位置;
Ø Properties:添加Ant指定的属性;
Ø JavaOptions:设置运行java时的属性,例如内存、堆大小等;
2) ExecuteWindows batch command
备注:执行Windows的批处理命令,这里不能利用Hodson设置的变量;
a) 构建后操作
1) PublishJavadoc:设置构建时产生JavaDoc时的文件目录;
2) Archivethe artifacts:设置构建后哪些文件需要进行归档处理;
3) E-mailNotification:邮件提醒
备注:可以向多个人发送邮件,通过“;”进行分割
4) StatusMonitor:构建状态监控;
好,基本的配置到这里结束,可以搭建一个新的任务进行构建了。
当配置完成一个任务后,回到主控制面板:
Ø 上图中右边列表列举现在已经配置的任务已经任务当前的状态
Ø 左边有构建队列,当有构件时,会把当前正在构建的队列在上面进行列举;
Ø 上图右下角有RSS订阅,支持订阅全部、失败和最后一次等;
当一个任务配置完成后,可以采用手动构建和触发器构建两种方式,在项目验证阶段,可以通过手动触发方式,点击任务区的“立即构建”,会在BuildHistory中出现以下进度条:
点击进度条,可以进入到具体的编译过程,例如下图:
等构建完毕后,你可以看到最新任务构建的结果图:
浏览任务的整体运行状况入下图:
最左边列图示为最后一次构建状态,第二列图示为整个任务的构建总体结果,具体如下表示。
Jenkins通过当前构建状态和构建稳定新
Ø 当前构建状态分为以下几种
项目构建完成,同时被认为是稳定的 |
|
项目构建完成,但被认定为不稳定 |
|
构建失败 |
|
作业已经禁止 |
Ø 构建稳定行,Jenkins会基于一些后处理器任务为构建发布一个稳健指数(从0-100 ),越高越稳定
构建成功率>80% |
|
构建成功率60%-79% |
|
构建成功率40%-59% |
|
构建成功率20%-39% |
|
构建成功率0-19% |
期待任务编译都处于和 状态。