jenkins+Maven持續(xù)繼承中的不同環(huán)境配置問題解決

說明:改文檔主要用于開發(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/*

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容