基于Jenkins+Maven+Git实现自动化构建和部署

安装jdk1.7

  1. 下载jdk-7u79-linux-x64.tar.gz至/usr/local目录,解压并创建软连接:

    tar -zxvf jdk-7u79-linux-x64.tar.gz
    ln -s jdk1.7.0_79 jdk

  2. 在/etc/profile中增加环境变量:

    export JAVA_HOME=/usr/local/jdk
    export CLASSPATH=./:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
    export PATH=$JAVA_HOME/bin:$PATH

  3. 重新打开shell,输入“java -version”,如下图所示,说明jdk1.7安装成功。
    1

安装Maven

  1. 下载apache-maven-3.3.9-bin.tar.gz至/usr/local目录,解压并创建软连接:

    tar -zxvf apache-maven-3.3.9-bin.tar.gz
    ln -s apache-maven-3.3.9 maven

  2. 在/etc/profile中增加环境变量:

    export M2_HOME=/usr/local/maven
    export M2=$M2_HOME/bin
    export PATH=$M2:$PATH

  3. Maven默认本地库地址是用户目录下的.m2/repository,可以通过修改用户目录下的.m2/settings.xml或Maven安装目录下的conf/settings.xml来修改本地库地址:

    \<localRepository>/usr/local/maven/repo\</localRepository>

.m2/settings.xml优先级高于conf/settings.xml,.m2/settings.xml适用于某个用户,conf/settings.xml适用于所有用户。

  1. 重新打开shell,输入“mvn -version”,如下图所示,说明Maven安装成功。
    1

安装Git

  1. 直接使用yum方式安装:

    yum install git

  2. 安装后输入“git”,如下图所示,说明Git安装成功。
    1

安装启动Jenkins

下载Jenkins.war,可以将该war包置于Web应用容器(如Tomcat)的应用目录下,通过Tomcat启动Jenkins,也可以直接使用“java -jar”启动Jenkins,使用Jetty作为Web应用容器。
启动前,需要在/etc/profile增加Jenkins的环境变量:

export JENKINS_HOME=/usr/local/jenkins

使用如下命令启动Jenkins:

nohup java -jar /usr/local/jenkins.war &

Jenkins默认使用8080端口,在浏览器下打开如图所示:
1

配置Jenkins

  1. 配置用户登录
    在“系统管理->Configure Global Security”中设置“启用安全”,如图所示:
    1
    安全域可以选择“Jenkins专有用户数据库”,并允许用户注册。
    保存后页面右上角会出现“注册”选项,注册用户后再进入“系统管理->Configure Global Security”,设置用户的授权策略,如图所示:
    1
    授权策略可以选择“安全矩阵”,取消匿名用户的所有权限,为“test”用户赋予所有权限。
  2. 安装Git插件
    Jenkins默认没有安装Git插件,可以在“系统管理->管理插件”中选择Git插件进行安装,如图所示:
    1
  3. 配置jdk和Maven
    在“系统管理->系统设置”中配置jdk和Maven,如图所示:
    1
    1

自动构建和部署项目

web-test是一个Java Web项目,使用Maven构建,代码托管在GitHub上,使用Jenkins进行自动构建和部署。

  1. 新建项目
    选择“构建一个maven项目”,如图所示:
    1
  2. Git配置
    在“源码管理”中选择“Git”,并输入项目的GitHub库地址(事先需要将Jenkins所在服务器的公钥添加到项目的“Deploy Keys”中),如图所示:
    1
  3. Maven配置
    在“构建触发器->Build”中设置Maven构建目标和选项,在“构建触发器->Post Steps”中设置构建成功后执行的Shell,Shell的功能是通过scp命令将war包拷贝至部署服务器,解压并重启Web应用进程,如图所示:
    1
    Shell代码如下,配置完成后,点击“保存”:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #!/bin/sh
    hudson_basedir=/usr/local/jenkins/workspace/web-test/
    module_name=web-test
    war_name=test
    ip=xxx.xxx.xxx.xxx
    resin_sh=/usr/local/resin/bin/httpd_test.sh
    webapp_dir=/opt/app
    war_source=$hudson_basedir/target/$war_name.war
    war_goal=$webapp_dir/$war_name.war
    war_goal_dir=$webapp_dir/$war_name
    user=root

    function deploy(){
    echo " ---------------------------- stop resin in ${ip} ..."
    ssh ${user}@${ip} "$resin_sh stop";
    while [ `ssh ${user}@${ip} " $resin_sh status | grep java.net.ConnectException | wc -l " ` = "0" ];do
    echo "waiting for resin stop "
    sleep 1
    done;
    echo "stop resin ok !"
    ssh ${user}@${ip} "rm -rf $war_goal_dir*";
    scp $war_source ${user}@${ip}:$war_goal;
    ssh ${user}@${ip} "unzip -oq $war_goal -d $war_goal_dir ";
    echo "start resin ..."
    ssh ${user}@${ip} "$resin_sh start";
    echo " ----------------------------- start resin ok !"
    }

    function main(){
    deploy
    }

    main
  4. 构建、部署项目
    在项目中,点击“立即构建”,在“Console Output”可以实时观察构建、部署过程,如图所示:
    1
    构建、部署成功后,浏览器下访问Web应用,访问正常。
    1