您的位置:首页 > 其它

使用jenkins进行项目构建

2015-10-18 20:18 232 查看
当服务器的数量比较多的时候,部署项目的时候如果仍然采取最原始的方法(如使用WinSCP等工具手动拖代码),不仅效率低下,而且对于改动比较多的项目,遗落掉文件也是时常发生的事情。这种工作真的让程序员觉得一点成就感都没有。于是,我们找到了Jenkins工具,Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:1、持续的软件版本发布/测试项目。2、监控外部调用执行的工作。

简单来说,使用Jenkins工具,发布项目的时候我们只需要点一下立即构建按钮,上传变动代码,重启服务器(如果需要)等等这些工作它都可以承包了。


一、安装

安装Jenkins很简单,首先去Jenkins官网下载:http://jenkins-ci.org/,然后执行rpm
-ivh jenkins-1.633-1.1.noarch.rpm命令即可完成安装

安装完成后使用service jenkins start启动,默认端口8080,通过浏览器即可访问。

修改默认的端口号,请编辑这个文件:/etc/sysconfig/jenkins


二、配置

在这里主要配置三个地方,设置操作权限、JDK以及MAVEN,选择SVN对应的版本,其他的可以使用默认。


设置操作权限

jenkins默认任何用户可以做任何事情,出于安全考虑,最好设置为登录用户才可以做任何事情。

在系统管理>Configure Global Security,启用安全,选上允许用户注册和登录用户可以做任何事即可。




JDK以及MAVEN

JDK和MAVEN的配置在系统管理>系统设置里面操作,只需要填写你在机器上安装的路径即可,不推荐让jenkins自动安装。




三、创建项目


新建Item

一般来说,项目有dev、alpha、beta、product四种环境。除去我们本地的开发环境,我们使用jenkins对其他三种环境进行项目构建,每种环境又分为构建后重启(tomcat)、不重启(tomcat)两种。如下图所示,没有加_restart的代表构建成功后不重启tomcat。



我们可以先新建一个Item,后续的Item选择复制已有的Item,如下图。完成后在配置只需要做些参数上的修改即可。




配置Item

此处用ssm_local和ssm_local_restart的配置作为解释。
点击视图列表中的ssm_local进入Item,点击左侧的配置,进入到Item的详细配置。描述只是帮助你更换的理解这个Item是做什么的。

主要的配置有svn和shell 脚本两个地方。如果你使用svn进行持续集成,选择Subversion,填写svn的URL,输入用户名和密码,当构建项目的时候jenkins会从这个地址更新最新的提交,然后进行项目构建。

在Root POM填写 pom.xml

在Goals and options 填写要执行的maven命令,我们有三种环境,所以需要带上参数,maven执行命令时使用对应的配置文件。新增一个shell脚本命令,执行/mnt/datadrive/deploy.sh这个shell脚本,第一个参数是这个Item的名称,第二个参数是maven编译后的项目名称。点击保存按钮就完成了配置。



重启跟不重启的区别也在于shell脚本这里,重启的shell脚本配置如下图:

第一个shell脚本比不重启的脚本多了一个参数restart(为何要多加restart,请到后面看 deploy的脚本便可知道),其他的完全一样。

唯一不同的是这里多了一个shell,告诉jenkins我还需要执行这个restart.sh重启脚本。第一个参数为保存服务器的IP和登录信息,第二个参数是服务名称。




四、shell 脚本


deploy.sh

#!/bin/sh
pwdpath=$(cd "$(dirname "$0")"; pwd)
ver=$1
project=$2
restart=""
if [ $# == 3 ]; then
restart="_"$3
fi
webapps=/mnt/apache-tomcat-7.0.61/webapps
source=/var/lib/jenkins/workspace/$ver$restart/target/$project
i=0
for line in `cat $pwdpath/$ver.server`
do
host=`echo $line | awk -F ":" '{print $1}'`
port=`echo $line | awk -F ":" '{print $2}'`
user=`echo $line | awk -F ":" '{print $3}'`
pass=`echo $line | awk -F ":" '{print $4}'`
echo "======= Deploy the `expr $i + 1`th server, name -> $host:$port ======="
sshpass -p $pass rsync -vr --delete  '-e ssh -p '$port'' $source $user@$host:/$webapps
let i++
done


restart.sh

#!/bin/sh
pwdpath=$(cd "$(dirname "$0")"; pwd)
ver=$1
server=$2
i=0
for line in `cat $pwdpath/$ver.server`
do
echo "======= Restart the "`expr $i + 1`"th server ======"
temp=`expr $i % 2`
s=`expr $temp \* 60`
host=`echo $line | awk -F ":" '{print $1}'`
port=`echo $line | awk -F ":" '{print $2}'`
user=`echo $line | awk -F ":" '{print $3}'`
pass=`echo $line | awk -F ":" '{print $4}'`
sshpass -p $pass ssh -p $port $user@$host 'service '$server' restart'
echo "Sleep "$s" ..."
sleep $s
let i++
done


ssm_local.server

192.168.1.102:22:root:123456



五、项目构建

选择ssm_local_restart 点击立即构建,查看控制台输出,我们可以看到进行了文件同步,并且重启了tomcat。




六、总结

至此,我们已经可以很方便的使用jenkins持续的软件版本发布,当svn有更新的时候,我们可以点击一下立即构建,jenkins就会帮我们做好一切工作,再也不用一个文件一个文件的使用winSCP拖动上传了。
但其实还有一点瑕疵,同步文件的时候现在使用的是比对时间同步,当jenkins执行maven命令时,因为执行了clean命令,所以其实也是所有文件都需要再同步一次,因此deploy脚本还有待进一步修改,敬请期待。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: