用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 ...
随机推荐
- android 项目学习随笔六(网络缓存)
1. 对SharePreference的封装 import android.content.Context; import android.content.SharedPreferences; /** ...
- 中颖4位MCU的减法汇编指令
1, SUB M 执行动作: M - A -> A, 如果M-A的过程中没有产生借位,则CY= 1,如果产生了借位,则CY= 0. 其中,A为累加器. 2, SBI M, I 执行动作:M - ...
- master-slave(主/从)模式
主从模式 一般来说用在数据库集群比较多,主要是实现读写分离.对于数据库应用而言基本上是读大于写,因此由 Master 服务器负责增.删.改操作,由 Slave 负责读操作(也就是 SELECT),Ma ...
- java 面试每日一题7
题目:判断101-200之间有多少个素数,并输出所有素数. 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数. public cla ...
- 在Oracle 中使用CONNECT BY PRIOR START WITH 语句详解
语法:connect by 是结构化查询中用到的,其基本语法如下: start with,connect by主要目的:从表中取出树状数据.可以假想成表中存成的各条数据是分别是树中的一个结点. sel ...
- 求两个数的最大公约数(Java)
获得两个随机数(100以内),并放入数组中 public int[] getTwoRandom(){ int[] t = new int[2]; Random rand = new Random(); ...
- 关闭用miniUI打开的窗口
miniUI打开的窗口用window.close关闭无效, 应该用window.CloseOwnerWindow();
- HttpConnection方式访问网络
参考疯狂android讲义,重点在于学习1.HttpConnection访问网络2.多线程下载文件的处理 主activity: package com.example.multithreaddownl ...
- Python基本概念及零碎知识点
1.python面向对象 类和对象是面向对象编程的两个主要方面.类创建一个新类型,而对象这个类的实例:这类似于你有一个int类型的变量,这存储整数的变量是int类的实例(对象)把握一点:在python ...
- 第十二届浙江省大学生程序设计大赛-Capture the Flag 分类: 比赛 2015-06-26 14:35 10人阅读 评论(0) 收藏
Capture the Flag Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge In computer security, Ca ...