美文网首页git大型网站架构自动化构建相关技术
jenkins+Maven持续继承中的不同环境配置问题解决

jenkins+Maven持续继承中的不同环境配置问题解决

作者: jackcooper | 来源:发表于2016-12-16 16:06 被阅读1954次

    说明:改文档主要用于开发人员改造现有系统,快速使用持续继承自动部署。实现开发、测试、生产环境自动打包。解决频繁打包,替换配置文件出错等等问题。让一切自动化起来。

    第一部分:项目修改部分

    1、修改service.sh脚本。

    替换项目下/main/resource/bin中的service.sh文件。注意:标注部分请替换成你所修改的服务的MAINCLASSNAME。

    #!/bin/bash

    #project directory

    MAINCLASSNAME="com.reapal.main.CoreMain"

    if [ -z "$BASE_DIR" ] ; then

    PRG="$0"

    # need this for relative symlinks

    while [ -h "$PRG" ] ; do

    ls=`ls -ld "$PRG"`

    link=`expr "$ls" : '.*->\(.*\)$'`

    if expr "$link" : '/.*'> /dev/null; then

    PRG="$link"

    else

    PRG="`dirname"$PRG"`/$link"

    fi

    done

    BASE_DIR=`dirname "$PRG"`/..

    # make it fully qualified

    BASE_DIR=`cd "$BASE_DIR"&& pwd`

    #echo "Benchtest is at$BASE_DIR"

    fi

    source $BASE_DIR/bin/env.sh

    AS_USER=`whoami`

    LOG_DIR="$BASE_DIR/log"

    PID_DIR="$BASE_DIR/log"

    PID_FILE="$PID_DIR/.run.pid"

    CONFIG_FILE=" $BASE_DIR"

    function running(){

    if [ -f "$PID_FILE" ]; then

    pid=$(cat "$PID_FILE")

    process=`ps aux | grep " $pid" | grep -v grep`;

    if [ "$process" =="" ]; then

    return 1;

    else

    return 0;

    fi

    else

    return 1

    fi

    }

    function start_server() {

    if running; then

    echo "is running."

    exit 1

    fi

    mkdir -p $PID_DIR

    mkdir -p $LOG_DIR

    chown -R $AS_USER $PID_DIR

    chown -R $AS_USER $LOG_DIR

    sleep 1

    nohup $JAVA $SERVER_ARGS$MAINCLASSNAME $CONFIG_FILE >/dev/null 2>&1 &

    echo $! > $PID_FILE

    chmod 755 $PID_FILE

    sleep 1;

    }

    function stop_server() {

    if ! running; then

    echo "service is notrunning."

    exit 1

    fi

    count=0

    pid=$(cat $PID_FILE)

    while running;

    do

    let count=$count+1

    echo "Stopping $counttimes"

    if [ $count -gt 5 ]; then

    echo "kill -9 $pid"

    kill -9 $pid

    else

    kill $pid

    fi

    sleep 3;

    done

    echo "Stop servicesuccessfully."

    rm $PID_FILE

    }

    function help() {

    echo "Usage: startup.sh{start|stop}" >&2

    echo "start:start the server"

    echo "stop:stop the server"

    }

    command=$1

    shift 1

    case $command in

    start)

    start_server $@;

    ;;

    stop)

    stop_server $@;

    ;;

    *)

    help;

    exit 1;

    ;;

    esac

    说明:此脚本做了细微修改,注释掉了启动后打印日志的代码。同时去掉了自动创建日志文件的代码。日志文件通过log4j配置生成。便于日切。

    2、基于dubbo的服务实现流程(请参考base-core项目)

    (1)修改pom.xml文件。

    在pom.xml文件的project标签内(倒数第二行)添加如下配置:

    说明:true添加的地方说明时默认的配置。就是使用maven打包不传参时,默认使用的配置。

    (2)修改resource/assembly/assembly.xml文件

    特别说明:如果你的项目之前的标签配置的是/src/main/resources请在其前面添加${project.basedir},修改之后如下:

    上面修改主要解决windows和linux下文件路径问题。添加${project.basedir}后,linux系统就可以正常打包了。如果缺少此处,mac、linux系统是无法打包的。

    (3)修改resource/assembly/assembly.xml文件

    (4)准备env文件。如下图所示,在resource中添加如下目录的文件(与环境相关的配置)。

    (5)如何测试自己配置的是否成功?

    使用maven命令打包

    clean package -P dev或者clean package -P qa或者clean package -P prod

    检查打包中的配置文件是否正确。

    3、基于dubbo的web项目实现流程(请参考base-web-auth项目)

    (1)同2(1)中修改。修改完后如下所示。

    (2)继续修改pom.xml文件(与dubbo服务不通之处)

    按照下图添加对应配置。

    配置:dev

    添加maven-war-plugin配置:

    (3)测试:同2中测试。

    第二部分:jenkins持续集成配置

    1、前提:你的代码已经在gitlab上托管。(请参考giltlab文档,此处不做说明)

    Gitlab托管代码,首次提交请在项目内添加.gitignore文件,防止一些不必要的文件提交。

    下图仅供参考:

    2、Jenkins配置

    (1)jenkins build配置

    (2)post steps配置,可以配置多个module,详情请参考basev2项目。

    (3)目标服务器准备

    如上图10.168.16.115即为项目自动打包成功后发布的服务器地址。使用前提如下:

    u在目标服务器创建dev用户工作空间为/home/dev

    u在home下准备启动脚本publish.sh

    内容如下:

    #!/bin/bash

    #defined

    BASE_HOME="/home/dev"

    PROJECT_NAME="$1"

    DIR="$2"

    #param validate

    if [ $# -lt 2 ]; then

    echo "you must use like this : ./publish.sh "

    exit

    fi

    if [ ! -f $DIR ] ; then

    echo "*****The destination [$DIR] is not exist , pleast confirm it first !!! ***********"

    exit

    fi

    if [ -n "`echo $DIR | sed -n /\.war$/p`" ] ;then

    #shutdown tomcat

    "$BASE_HOME"/$PROJECT_NAME/bin/shutdown.sh

    echo "tomcat shutdown"

    ID=`ps -ef | grep java | grep $PROJECT_NAME|awk '{print $2}'`

    echo $ID

    echo "---------------"

    for id in $ID

    do

    kill -9 $id

    echo "killed $id"

    done

    echo "---------------"

    #publish project

    echo "scan no tomcat pid,$PROJECT_NAME publishing"

    rm -rf "$BASE_HOME"/$PROJECT_NAME/webapps/ROOT

    cp $DIR "$BASE_HOME"/$PROJECT_NAME/webapps/ROOT.war

    #start tomcat

    "$BASE_HOME"/$PROJECT_NAME/bin/startup.sh

    echo "tomcat is starting,please try to access $PROJECT conslone url"

    elif [ -n "`echo $DIR | sed -n /\.tar\.gz$/p`" ] ; then

    #stop provider

    "$BASE_HOME"/$PROJECT_NAME/bin/service.sh stop

    echo "service stop"

    ID=`ps -ef | grep java | grep $PROJECT_NAME|awk '{print $2}'`

    echo $ID

    for id in $ID

    do

    kill -9 $id

    echo "killed $id"

    done

    #unzip tar.gz

    rm -rf "$BASE_HOME"/$PROJECT_NAME/

    tar -zxf$DIR -C ./

    cd "$BASE_HOME"/$PROJECT_NAME/bin

    sed -i 's/\r//' *.sh

    chmod 775 *.sh

    #start provider

    "$BASE_HOME"/$PROJECT_NAME/bin/service.sh start

    else

    echo "****************The DIR must endwith <.war>or <.tar.gz> *****************************"

    exit

    fi

    特别说明:

    如果是dubbo服务,无需做其他准备。如果是web项目,请先在服务器的/home/dev/目录下准备好tomcat并设置好端口。

    如果出现权限不足,请执行chown -R dev:dev  /home/dev/*

    相关文章

      网友评论

        本文标题:jenkins+Maven持续继承中的不同环境配置问题解决

        本文链接:https://www.haomeiwen.com/subject/dvinmttx.html