git大型网站架构自动化构建相关技术

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

2016-12-16  本文已影响1954人  jackcooper

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

第一部分:项目修改部分

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/*

上一篇下一篇

猜你喜欢

热点阅读