天天看點

jenkins+Maven持續繼承中的不同環境配置問題解決

說明:改文檔主要用于開發人員改造現有系統,快速使用持續繼承自動部署。實作開發、測試、生産環境自動打包。解決頻繁打包,替換配置檔案出錯等等問題。讓一切自動化起來。

第一部分:項目修改部分

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"

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;

return 0;

return 1

}

function start_server() {

if running; then

echo "is running."

exit 1

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."

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

kill $pid

sleep 3;

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标簽内(倒數第二行)添加如下配置:

jenkins+Maven持續繼承中的不同環境配置問題解決

說明: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

内容如下:

#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

if [ ! -f $DIR ] ; then

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

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

kill -9 $id

echo "killed $id"

#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"

#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

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

特别說明:

如果是dubbo服務,無需做其他準備。如果是web項目,請先在伺服器的/home/dev/目錄下準備好tomcat并設定好端口。

如果出現權限不足,請執行chown -R dev:dev  /home/dev/*