自动集成有很多种方案,本例用到的工具是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配置

主要设置包括三项:

  1. 源码管理SCM,本例用的是SVN,必要胡设置有一项是SVN地址,另一项是项目相对存放路径;

  2. 触发策略

    Poll SCM:根据SVN版本的变化选择是否需要进行项目集成;

    本例是每天上午10点和下午3点,周一到周五(H 10,15 * * 1-5),用的是cron语法,详细请参考Jenkins说明;

  3. 执行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实现持续集成、测试、部署的更多相关文章

  1. Jenkins+Maven+Sonar系统持续集成环境部署以及配置

    一.Jenkins介绍以及安装 什么是持续集成?   随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Ag ...

  2. 使用 Jenkins 搭建 iOS/Android 持续集成打包平台【转】

    背景描述 根据项目需求,现要在团队内部搭建一个统一的打包平台,实现对iOS和Android项目的打包.而且为了方便团队内部的测试包分发,希望在打包完成后能生成一个二维码,体验用户(产品.运营.测试等人 ...

  3. Jenkins构建Android项目持续集成之findbugs的使用

    Findbugs简介 关于findbugs的介绍,可以自行百度下,这里贴下百度百科的介绍.findbugs是一个静态分析工具,它检查类或者 JAR 文件,将字节码与一组缺陷模式进行对比以发现可能的问题 ...

  4. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  5. Linux-GitLab+Jenkins持续集成+自动化部署

    GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...

  6. Jenkins Jenkins结合GIT Maven持续集成环境配置

    Jenkins结合GIT Maven持续集成环境配置   by:授客 QQ:1033553122 安装Git插件 1 安装Git客户端 1 安装JAVA JDK及MAVEN 2 Jenkins JDK ...

  7. 持续集成①安装部署jenkins从git获取代码

    持续集成①安装部署jenkins从git获取代码 一:持续集成的概念: 1.1:总体的概括 持续集成Continuous Integration 持续交付Continuous Delivery 持续部 ...

  8. Docker+Jenkins+Maven+SVN搭建持续集成环境

    Docker+Jenkins+Maven+SVN搭建持续集成环境 环境拓扑图(实验项目使用PHP环境) 发布流程图 环境说明 系统:Centos 7.4 x64 Docker版本:18.09.0 Ma ...

  9. jenkins 与 gitlab 的持续集成

    前言介绍 gitlab与jenkins的安装部署请参考之前的文章:这里介绍一下jenkins与gitlab结合的好处. gitlab可以自己实现CICD功能,jenkins也可以结合其他工具来实现CI ...

随机推荐

  1. 使用 Delphi Xe 的 TDictionary

    原本一直使用 TList, 将定义的一个个 Record 保存在TList 里面, 为了能把某些对象管理起来, 例如一个类的 n 多实例,可以进行索引.查找.释放等 今天刚看到原来已经有了一个叫 TD ...

  2. 161121、hibernate导致数据出错的两个地方

    一.在查询出来的对象上直接设置属性(该属性配置了可以持久化,如果不是可持久化的就没有关系). 出错的代码:(查询用的不好也会导致数据更新哦) Pagination pagination = group ...

  3. iOS 学习笔记 一 (2015.02.05)

    一:Xcode6输入框设置为 keyboard type设置为Number Pad弹不出键盘的解决办法   问题:Can't find keyplane that supports type 4 fo ...

  4. STM32外部中断.

    void EXTIX_Init(void){     EXTI_InitTypeDef EXTI_InitStructure;    NVIC_InitTypeDef NVIC_InitStructu ...

  5. CDN流量放大攻击思路

    首先,为了对CDN进行攻击,我们必须清楚CDN的工作原理,这里我们再来简单介绍一下CDN的工作模型. CDN的全称是Content Delivery Network(内容分发网络),通过在网络各处的加 ...

  6. kmemleak的使用---内存泄露检测工具【转】

    转自:http://blog.csdn.net/lishenglong666/article/details/8287783 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] ...

  7. java 调用grads 自动批量生成图片

    将 -lbcx 命令 后面的4个参数(gs文件名.参数1.参数2.参数3) 放在单引号里面就可以执行了.

  8. Aspose.Words操作word生成PDF文档

    Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...

  9. Python拷贝(深拷贝deepcopy与浅拷贝copy)

    Python中的对象之间赋值时是按引用传递的,如果需要拷贝对象,需要使用标准库中的copy模块. 1.copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2.copy.deepco ...

  10. ecshop发票不能使用出现flow.php on line 723等报错

    最模板给客户ecshop网站做编码转换出现个问题,网站在点结算页面出现Warning: Invalid argument supplied for foreach flow.php on line 7 ...