用Jenkins+Gradle+Jetty实现持续集成、测试、部署
自动集成有很多种方案,本例用到的工具是Jenkins(前身Hudson)+Gradle+Jetty,关于Gradle可参考上一篇,Gradle常见问题。
本例项目名称: WAP
Jetty
安装Jenkins
本例用的是最新版Jetty9,在安全上做了升级,直接放在webapps目录部署不能成功,需要在webapps目录下添加文件jenkins.xml,内容如下:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/jenkins</Set>
<Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/jenkins.war</Set>
<Get name="securityHandler">
<Set name="loginService">
<New class="org.eclipse.jetty.security.HashLoginService">
<Set name="name">Jenkins Realm</Set>
<Set name="config"><SystemProperty name="jetty.home" default="."/>/etc/realm.properties</Set>
</New>
</Set>
</Get>
</Configure>
详见:https://wiki.jenkins-ci.org/display/JENKINS/Jetty
Jetty发布项目
WAR包:直接拷贝到Jetty的webapps目录即可,Jetty会监测变化进行热部署,无需手动重新启动jetty。
在Jetty启动项目时有可能遇到OOME错误,解决方法:
vim /jetty9/start.ini
##找到#--exec取消注释,修改如下:
--exec
-XX:MaxPermSize=512m
Jenkins配置
主要设置包括三项:
源码管理SCM,本例用的是SVN,必要胡设置有一项是SVN地址,另一项是项目相对存放路径;
触发策略
Poll SCM:根据SVN版本的变化选择是否需要进行项目集成;
本例是每天上午10点和下午3点,周一到周五(H 10,15 * * 1-5),用的是cron语法,详细请参考Jenkins说明;
执行Gradle构建脚本
##进入项目目录
cd ${WORKSPACE}/WAP
##赋予gradlew执行权限
chmod +x ./gradlew
##执行单元测试
./gradlew test
配置如图:
Gradle - build.gradle测试和部署部分
//======================Test集成测试===========================
test {
//测试结果,默认为成功!
ext.testResult = true
testLogging.showStandardStreams = true
// 使用 TestNG ,默认是JUnit
useTestNG()
// 设置JVM运行时参数
minHeapSize = "128m"
maxHeapSize = "512m"
jvmArgs '-XX:MaxPermSize=256m'
//一组测试完成,如果有一组测试是失败的则设置整体结果为失败
afterSuite { descriptor, result ->
if (result.resultType == TestResult.ResultType.FAILURE) {
testResult = false
}
}
}
/**
* 单元测试完成,如果成功则部署应用到测试环境的Jetty webapps目录,Jetty会自动热部署!
*/
task testCompleted <<{
if (test.testResult) {
try {
logger.lifecycle("Build war package!" )
//编译、打包
war.execute()
//COPY到部署目录进行部署
//可根据不版本分别分发到不同开发过程服务器,如M,BETA类型等
//本例只发布到集成测试服务器
//发布目录,可通过gradle.properties配置
def projectBuildDir = "/webapps/"
def warname = projectName + '-' + version + '.war'
def fromdir = buildDir.toString() + "/libs/" + warname
copy{
logger.lifecycle("Copy war from: $fromdir To : $projectBuildDir")
from fromdir
into projectBuildDir
rename { String fileName ->
projectName + '.war'
}
}
} catch (Exception ex) {
logger.error("Error!" + ex.message )
}
}
}
//在执行完集成测试后执行testCompleted任务,根据测试结果判断是否需要部署。
test.finalizedBy testCompleted
查看集成测试报告
测试报告地址:
http://xxx/jenkins/job/WAP/ws/WAP/target/reports/tests/index.html
结果如图:
构建控制台输出Console Output
Started by an SCM change
Building in workspace /home/hadoop/.hudson/jobs/WAP/workspace
Updating https://192.168.0.140/svn/JENKINS-TEST/WAP at revision '2013-07-10T15:28:28.900 +0800'
U src/main/webapp/WEB-INF/spring-mvc.xml
U src/main/webapp/tologin.html
At revision 12
[workspace] $ /bin/sh -xe /tmp/hudson166417485787384228.sh
+ cd /home/hadoop/.hudson/jobs/WAP/workspace/WAP
+ chmod +x ./gradlew
+ ./gradlew test
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources UP-TO-DATE
:testClasses UP-TO-DATE
:test UP-TO-DATE
:buildDashboard UP-TO-DATE
:testCompleted
Build war package!
Copy war from: /home/xxx/.hudson/jobs/WAP/workspace/WAP/target/libs/wap-1.0.war To : /usr/local/jetty9/webapps/
BUILD SUCCESSFUL
Total time: 35.719 secs
Finished: SUCCESS
#完!
用Jenkins+Gradle+Jetty实现持续集成、测试、部署的更多相关文章
- Jenkins+Maven+Sonar系统持续集成环境部署以及配置
一.Jenkins介绍以及安装 什么是持续集成? 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Ag ...
- 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】
背景描述 根据项目需求,现要在团队内部搭建一个统一的打包平台,实现对iOS和Android项目的打包.而且为了方便团队内部的测试包分发,希望在打包完成后能生成一个二维码,体验用户(产品.运营.测试等人 ...
- Jenkins构建Android项目持续集成之findbugs的使用
Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...
- Net 项目构建基于Jenkins + Github + Mono 的持续集成环境
Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...
- Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...
- Jenkins Jenkins结合GIT Maven持续集成环境配置
Jenkins结合GIT Maven持续集成环境配置 by:授客 QQ:1033553122 安装Git插件 1 安装Git客户端 1 安装JAVA JDK及MAVEN 2 Jenkins JDK ...
- 持续集成①安装部署jenkins从git获取代码
持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...
- Docker+Jenkins+Maven+SVN搭建持续集成环境
Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...
- jenkins 与 gitlab 的持续集成
前言介绍 gitlab与jenkins的安装部署请参考之前的文章:这里介绍一下jenkins与gitlab结合的好处. gitlab可以自己实现CICD功能,jenkins也可以结合其他工具来实现CI ...
随机推荐
- Linux kernel的 Makefile和Kconfig以及Make menuconfig的关系【转】
本文转载自:http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.html 熟悉内核的Makefile对开发设备驱动.理解内核代码结构都是非常重要的linux ...
- ExtJS的MessageBox总结
自己写了个ExtJS的MsgBox的小模版,以后遇到需要使用提示的地方就拿过来改改,免得每次都重新写. /**MsgBox start**/ Ext.Msg.buttonText.yes = &quo ...
- 自定义tableViewCell
http://my.oschina.net/joanfen/blog/137601 效果如下图:可触发按钮事件 1.创建一个Empty Application 2.新建一个TableViewContr ...
- GCD 多线程同步
@property (strong, nonatomic) dispatch_queue_t barrierQueue; _barrieQueue = dispatch_queue_create(&q ...
- HDU 5795:A Simple Nim(博弈)
http://acm.hdu.edu.cn/showproblem.php?pid=5795 A Simple Nim Problem Description Two players take t ...
- 超文本标记语言(HTML)
超文本标记语言(HyperText MarkUp Language,HTML) HTML是用来制作网页的标记语言,HTML不需要编译,直接由浏览器解析: HTML文件是一个文本文件,包含了一些HTML ...
- jdk 与jre的区别
jdk就是java的开发工具集,顾名思义就是你做开发用的,其中包括javac,也就是java compiler等. jre(java runtime environment),就是java程序的运行环 ...
- c#之双色球
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- C# 单例模式Lazy<T>实现版本
非Lazy版本的普通单例实现: public sealed class SingletonClass : ISingleton { private SingletonClass () { // the ...
- 造字工房情书体MFQingShu_Noncommercial-Regular
造字工房情书体由造字工房字体设计师成瑜历时半年书写完成,其字形俊秀.遒劲有力,优雅中透出知性的气息.文从字顺,字形笔画柔美俊秀.刚柔并济,结构自然洒脱,充满活力朝气的青春气息,完美呈现了手写汉字之美, ...