說明:改文檔主要用于開發(fā)人員改造現(xiàn)有系統(tǒng),快速使用持續(xù)繼承自動部署。實現(xiàn)開發(fā)、測試、生產(chǎn)環(huán)境自動打包。解決頻繁打包,替換配置文件出錯等等問題。讓一切自動化起來。
第一部分:項目修改部分
1、修改service.sh腳本。
替換項目下/main/resource/bin中的service.sh文件。注意:標注部分請?zhí)鎿Q成你所修改的服務的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
說明:此腳本做了細微修改,注釋掉了啟動后打印日志的代碼。同時去掉了自動創(chuàng)建日志文件的代碼。日志文件通過log4j配置生成。便于日切。
2、基于dubbo的服務實現(xiàn)流程(請參考base-core項目)
(1)修改pom.xml文件。
在pom.xml文件的project標簽內(nèi)(倒數(shù)第二行)添加如下配置:

說明:true添加的地方說明時默認的配置。就是使用maven打包不傳參時,默認使用的配置。
(2)修改resource/assembly/assembly.xml文件
特別說明:如果你的項目之前的標簽配置的是/src/main/resources請在其前面添加${project.basedir},修改之后如下:
上面修改主要解決windows和linux下文件路徑問題。添加${project.basedir}后,linux系統(tǒng)就可以正常打包了。如果缺少此處,mac、linux系統(tǒng)是無法打包的。
(3)修改resource/assembly/assembly.xml文件
(4)準備env文件。如下圖所示,在resource中添加如下目錄的文件(與環(huán)境相關的配置)。
(5)如何測試自己配置的是否成功?
使用maven命令打包
clean package -P dev或者clean package -P qa或者clean package -P prod
檢查打包中的配置文件是否正確。
3、基于dubbo的web項目實現(xiàn)流程(請參考base-web-auth項目)
(1)同2(1)中修改。修改完后如下所示。
(2)繼續(xù)修改pom.xml文件(與dubbo服務不通之處)
按照下圖添加對應配置。
配置:dev
添加maven-war-plugin配置:
(3)測試:同2中測試。
第二部分:jenkins持續(xù)集成配置
1、前提:你的代碼已經(jīng)在gitlab上托管。(請參考giltlab文檔,此處不做說明)
Gitlab托管代碼,首次提交請在項目內(nèi)添加.gitignore文件,防止一些不必要的文件提交。
下圖僅供參考:
2、Jenkins配置
(1)jenkins build配置
(2)post steps配置,可以配置多個module,詳情請參考basev2項目。
(3)目標服務器準備
如上圖10.168.16.115即為項目自動打包成功后發(fā)布的服務器地址。使用前提如下:
u在目標服務器創(chuàng)建dev用戶工作空間為/home/dev
u在home下準備啟動腳本publish.sh
內(nèi)容如下:
#!/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并設置好端口。
如果出現(xiàn)權限不足,請執(zhí)行chown -R dev:dev ?/home/dev/*