第一集 hudson+gradle+git+maven(非必选)持续集成编译,打包,发布到仓库集成php
随着软件开发复杂度的不断提升,团队开发成员间如何更好地协同工做以确保软件开发的质量已经慢慢成为开发过程当中不可回避的问题。尤为是近些年来,敏捷(Agile) 在软件工程领域愈来愈红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤为的重要。java
持续集成正是针对这一类问题的一种软件开发实践。它倡导团队开发成员必须常常集成他们的工做,甚至天天均可能发生屡次集成。而每次的集成都是经过自动化的构建来验证,包括自动编译、发布和测试,从而尽快地发现集成错误,让团队可以更快的开发内聚的软件。
持续集成的核心价值在于:git
1 持续集成中的任何一个环节都是自动完成的,无需太多的人工干预,有利于减小重复过程以节省时间、费用和工做量;
2 持续集成保障了每一个时间点上团队成员提交的代码是能成功集成的。换言之,任什么时候间点都能第一时间发现软件的集成问题,使任意时间发布可部署的软件成为了可能;
3 持续集成还能利于软件自己的发展趋势,这点在需求不明确或是频繁性变动的情景中尤为重要,持续集成的质量能帮助团队进行有效决策,同时创建团队对开发产品的信心。程序员
业界广泛认同的持续集成的原则包括:shell
1)须要版本控制软件保障团队成员提交的代码不会致使集成失败。经常使用的版本控制软件有Subversion Git 等;centos
2)开发人员必须及时向版本控制库中提交代码,也必须常常性地从版本控制库中更新代码到本地;api
3)须要有专门的集成服务器来执行集成构建。根据项目的具体实际,集成构建能够被软件的修改来直接触发,也能够定时启动,如每半个小时构建一次;tomcat
4)必须保证构建的成功。若是构建失败,修复构建过程当中的错误是优先级最高的工做。一旦修复,须要手动启动一次构建。服务器
因而可知,一个完整的构建系统必须包括:app
一个自动构建过程,包括自动编译、分发、部署和测试等。
一个代码存储库,即须要版本控制软件来保障代码的可维护性,同时做为构建过程的素材库。
一个持续集成服务器。本文中介绍的 Jenkins /Hudson 就是一个配置简单和使用方便的持续集成服务器。
准备工做(centos 7 为例)
Hudson(戳一下进入官网)是一款轻量级、易扩展、易配置的持续集成平台,该集成平台maven2有良好的支持,而且扩展插件丰富,包括findbug,PMD静态分析插件、emma单元测试覆盖率插件、junit测试报告插件等等。
下面咱们以Hudson持续集成平台为例,主要讲解怎么安装hudson和hudson扩展插件的使用,并以maven2工程为例,创建新做业。
启动方式一
nohup java -jar hudson-1.398.war > hudson.log 2>&1 & // 启动hudson
启动方式二
下载Hudson的war包,http://hudson-ci.org/ 在tomcat环境里,在confCatalinalocalhost 中新建配置文件hudson.xml,配置以下
<?xml version="1.0" encoding="UTF-8"?> <Context docBase="HudsonPath/hudson.war" path="hudson" reloadable="false"> </Context>
HudsonPath为hudson.war的目录路径。
启动tomcat,访问http://localhost:8080/hudson便能访问咱们的持续集成应用了。Jboss环境中,复制war包到default目录下便可。以下为安装好之后的hudson访问界面。
系统管理选择管理插件
根据本身项目须要选择须要安装的插件,固然hudson也支持本身开发插件上传,这里就不赘述。
系统管理中进入系统设置
因为使用了gradle进行打包,上一步已经安装好了ant和gradle的插件。不过前提是安装好了jdk,git,gradle等的运行环境。具体怎么安装这里也不赘述,你能够去去问GG(google)
这里讲解两种,在咱们的项目中也是有两种包,一种是jar包,也就是一些基础jar包,须要提供给其它项目使用。
另外一种是服务包(tar),里面有4种内容,配置文件,自身的jar包,依赖的libs包,和相关的脚本(gradle和启服停服脚本)
配置job明细以下:
因为每次发布jar到maven私服须要手动打开Nexus移除陈旧的jar包,这样比较耽误时间,这里补充一个shell脚本配置方式,在每次打发布jar包前,将maven私服中对应的jar包移除掉,再执行打包发布.配置以下:
[注意:这里是hudson和maven私服是在同一个服务器上,若是不是得需ssh上去进行相应的操做]
拉取最新的代码到本地仓库,配置以下:
[注意:/fishsaying/admin/code_server.txt这个文件是用来配置须要打包的代码的分支 配置好的效果如图所示]
须要将远程仓库的代码克隆到本地服务器,如/fishsaying/build_dir/sys
编写脚本获取须要动态选择的分支的最新代码到本地 代码以下
利用groovy语音编写,不会的小伙伴能够学习一下这个在安卓开发中经常使用
build.gradle脚本文件以下
apply plugin: 'java' apply plugin: 'maven-publish' // 设置 JDK 版本 sourceCompatibility = 1.8 targetCompatibility = 1.8 //打包的版本 def _version = System.properties['version']; // 设置编译使用utf-8编码 tasks.withType(JavaCompile) { options.encoding = "UTF-8" } //maven仓库地址 repositories { maven { url "http://192.168.3.108:8081/nexus/content/groups/public/" } } //依赖的第三方jar包 dependencies { compile "com.fasterxml.jackson.core:jackson-annotations:2.4.0", "com.fasterxml.jackson.core:jackson-core:2.3.3", "com.fish.saying:fishsaying-log-sdk:2.0.0" testCompile "junit:junit:3.8.1" } //说明打包成jar文件 task apiJar(type: Jar) { baseName "fishsaying" from sourceSets.main.output } //推送到maven私服 设置好骨架 publishing { publications { api(MavenPublication) { groupId 'com.fs.fishsaying-service-api' artifactId 'fishsaying-service-api' version _version from components.java } } } //制定须要deploy的maven仓库地址 publishing { repositories { maven { url "http://192.168.3.108:8081/nexus/content/repositories/thirdparty/" credentials { username 'admin' password 'admin123' } } } }
补充:如何搭建maven私服请google这里再也不赘述。
整个流程作完就能够进行打包工做,这里选择的是手动打包,持续集成中的第一步完成,后续增长自动部署,测试,上线的内容,敬请期待……^_^
小福利:持续集成