Hudson配置和自动化部署项目
Hudson持续集成
Hudson是一个持续集成平台(升级版使用Jerkins),目前已经集成了SVN多库管理,Maven私有库,代码质量检测平台Sonarqube (目前使用的是7.2版本,需要对应的JDK版本是1.8版本)
需要安装的插件
Hudson需要的安装的基本插件如下:Legacy Maven 2 job type Plugin:这个插件主要是构建MAVEN任务, Hudson Subversion Plug-in:用于集成SVN多库管理,第一次启动Hudson时候:Hudson BIRT Charts Plugin (必选)JNA Native Support Plugin (必选)XPath Provider Plugin (必选),Publish Over SSH和Hudson SSH plugin:这两个插件主要作用是通过SSH连接自动化部署发布项目。Sonar Plugin:主要集成sonarqube。
系统设置
Hudson启动后,点击系统管理,子菜单下点击系统设置,如下。
首先需要设置平台名称,系统消息,执行者数量,生产前等待时间,签出重复次数,可以根据自己的实际需求进行设置
JDK的配置根据当前的版本sonar版本来选择,sonar4.6以上版本要JDK1.8,配置如下
Maven配置需要填写版本号和MAVEN_HOME路径
Sonar的配置需要sonar的部署应用地址,登录用户名、密码,数据库的URL、用户名、密码:
邮件通知服务:当用户名或者密码修改后,会发送邮件到指定的邮箱,我这里选择配置QQ邮箱(要开通SMTP服务),基本配置如下:
SSH部署发布配置需要部署的远程主机,主机名称,主机IP,用户名,授权验证,拷贝的远程主机地址(前缀)如/usr/local/project
构建MAVEN项目
如果项目存在依赖性,需要依次构建部署,如下,之前的测试项目包含了父工程(pom),公共基础类工程,公共配置类工程,核心基础工程,业务服务类功能,WEB服务展示等,存在依赖关系需要依次进行部署如下:
父工程的项目构建如下:
点击新建任务,填写任务名称,勾选 构建一个Maven 2/3 (Legacy)项目
点击OK配置基本描述部分
Source Code Management 配置部分选择Subversion
需要配置Repository URL和授权部分(根据用户名密码)
Root POM位置要结合 Hudson所在 Linux服务器中JOBs项目所在位置POM来填写,
配置完成后点击save,返回到列表页面,在项目列表上点击构建按钮,等待,当为绿色的时候表示项目发布成功,如果为红色,点击控制台,查看部署过程,分析原因。
需要启动的jar或者war工程自动化部署
这里主要说明与上述公共基础类的配置文件不同地方:以构筑的项目
edu-service-user为例,该Dubbo服务工程需要依赖edu-facade-user
勾选 Build after other jobs are built,填写项目名称
核心部分SSH连接调用脚本发布项目,
Source files:需要拷贝target目录下文件路径 相对路径 从 workspace开始算起(不包括workspace),多个文件以逗号为分割,Remove prefix:过滤需要拷贝的文件夹,从workspace到target之间路径(不包括workspace),
Remote directory:远程文件夹位置,之前在系统设置中已经配置了该远程服务器的基础路径 /usr/local/project 这里配置的路径是后续路径user
这样拷贝目标文件的完整路径是 /usr/local/project/user,
Exec command:执行远程服务器上的脚本,注意我这里通过SSH执行的脚本是service-user.sh 需要授权 chmod u+x/service-user.sh,该脚本命令如下
#!/bin/sh
## java env
export JAVA_HOME=/usr/local/java/jdk1.7
export JRE_HOME=$JAVA_HOME/jre
## service name
APP_NAME=user
SERVICE_DIR=/usr/local/project/$APP_NAME
SERVICE_NAME=edu-service-$APP_NAME
JAR_NAME=$SERVICE_NAME\.jar
PID=$SERVICE_NAME\.pid
cd $SERVICE_DIR
case "$1" in
start)
nohup $JRE_HOME/bin/java -Xms256m -Xmx512m -jar $JAR_NAME >/dev/null 2>&1 &
echo $! > $SERVICE_DIR/$PID
echo "=== start $SERVICE_NAME"
;;
stop)
kill `cat $SERVICE_DIR/$PID`
rm -rf $SERVICE_DIR/$PID
echo "=== stop $SERVICE_NAME"
sleep 5
P_ID=`ps -ef | grep -w "$SERVICE_NAME" | grep -v "grep" | awk '{print $2}'`
if [ "$P_ID" == "" ]; then
echo "=== $SERVICE_NAME process not exists or stop success"
else
echo "=== $SERVICE_NAME process pid is:$P_ID"
echo "=== begin kill $SERVICE_NAME process, pid is:$P_ID"
kill -9 $P_ID
fi
;;
restart)
$0 stop
sleep 2
$0 start
echo "=== restart $SERVICE_NAME"
;;
*)
## restart
$0 stop
sleep 2
$0 start
;;
esac
exit 0
点击save按钮,返回列表页面后重新点击构建项目,项目启动成功后
会在dubbo监控中心provider列表中显示如下:
Dubbo监控中心下也会有对应的生产者记录
配置文件勾选sonar后,该项目通过Maven配置发布到sonarqube中如下
感谢吴水成的Dubbo视频教程