dubbo+zookeeper+jenkins從打包開始

一.jenkins中maven構建java

有以下圖構建設置web

解釋說明:redis

pom.xmlspring

此處jenkins打包依賴的主要配置文件(規則)apache

 

settings.xmlvim

全局配置文件,主要用於配置maven的運行環境等一系列通用的屬性bash

 

clean package -Pqa  -DskipTests=trueapp

清class文件,打包構建,傳參qa打包( -Pqa ,此處的qa爲配置文件中設置的測試環境參數,-P選項 maven 會激活項目下的pom.xml配置的<profiles>標籤下id爲qa,以下圖),以及最後的跳過測試。less

 

pom.xml文件,目錄關係以下,vancloud-cloud-parent爲公共配置目錄,配置有多環境參數變量。socket

此項目打包時經過本身的pom.xml調用parent的pom.xml文件達到多環境打包目的(更簡單的多環境傳參在本項目的 pom.xml中配置便可,由於用到多環境配置文件的項目不止一個,因此建立一個公共配置文件)

公共配置文件pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.danny.vancloud</groupId>
        <artifactId>vancloud-cloud-dependencies</artifactId>
        <version>1.2.0-SNAPSHOT</version>
    </parent>
    <artifactId>vancloud-cloud-parent</artifactId>
  <version>1.2.0-SNAPSHOT</version>
    <name>vancloud-parent</name>
    <url>http://maven.apache.org</url>
    <packaging>pom</packaging>



    <properties>
        <main.basedir>..</main.basedir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

     <scm>
        <connection>scm:svn:https://192.168.1.244/svn/vancloud/tags/server/打包發佈/vancloud-build-all-1.2.0/server/公共依賴</connection>
        <developerConnection>scm:svn:https://192.168.1.244/svn/vancloud/tags/server/打包發佈/vancloud-build-all-1.2.0/server/公共依賴</developerConnection>
      </scm>

   <profiles>
           <profile>  
            <id>dev</id>  
            <properties>  
                <env>dev</env>
                <zookeeper.address>localhost:2181</zookeeper.address>
            </properties>  
            <activation>  
                <activeByDefault>true</activeByDefault>  
            </activation>  
        </profile>  
        <profile>  
            <id>qa</id>  
            <properties>  
                <env>qa</env>  
                <zookeeper.address>192.168.3.243:2181,192.168.3.152:2181,192.168.3.244:2181</zookeeper.address>
            </properties>  
        </profile>  
        <profile>  
            <id>uat</id>  
            <properties>  
                <env>uat</env>  
                <zookeeper.address>192.168.3.162:2181,192.168.3.161:2181,192.168.3.158:2181</zookeeper.address>
            </properties>  
        </profile>  
        <profile>  
            <id>product</id>  
            <properties>  
                <env>product</env>  
                <zookeeper.address>10.51.183.161:2181,10.51.181.181:2181,10.51.180.146:2181</zookeeper.address>
            </properties>  
        </profile>  
   </profiles>

    
    <build>
  
          <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-release-plugin</artifactId>
                <version>2.5.3</version>
                <configuration>
                    <tagBase>https://192.168.1.244/svn/vancloud/tags/server/公共依賴/</tagBase>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

</project>

 

本項目(oa)配置文件pom.xml

  <parent>
                <groupId>com.danny.vancloud</groupId>
                <artifactId>vancloud-cloud-parent</artifactId>
                <version>1.2.0-SNAPSHOT</version>
                <relativePath>../vancloud-cloud-parent</relativePath>    //經過groupID調用相對路徑下的配置文件pom.xml
  </parent>
 //其餘配置略...

 

解釋:jenkins經過maven打包時,經過-P傳入參數qa,maven經過pom.xml打包並調用公共配置獲得qa環境zookeeper.address值,並將返回值打入相應war或tar.gz包文件中。

 

此時可對比看下

 

dubbo的web端

對於consumer-ems-beans.xml文件

打包前:

[root@Jenkins3 resources]# pwd
/data/jenkins/workspace/QA-vancloud-oa-web/src/main/resources
[root@Jenkins3 resources]# ls
consumer-ems-beans.xml  jetty-contexts.xml  spring-redis.xml     spring-web-beans.xml
dubbo.properties        logback.xml         spring-vancloud.xml  vancloud-shiro.xml
[root@Jenkins3 resources]# vim consumer-ems-beans.xml

 

 打包後:

[root@develop3 classes]# pwd
/opt/source/vancloud-oa-web/WEB-INF/classes
[root@develop3 classes]# ls
com                     dubbo.properties    logback.xml       spring-vancloud.xml   vancloud-shiro.xml
consumer-ems-beans.xml  jetty-contexts.xml  spring-redis.xml  spring-web-beans.xml
[root@develop3 classes]# vim consumer-ems-beans.xml

 

dubbo的service端

 對於dubbo.properties

 打包前:

[root@Jenkins3 resources]# pwd
/data/jenkins/workspace/QA-vancloud-oa-service/src/main/resources
[root@Jenkins3 resources]# ls
dao  dubbo.properties  ehcache.xml  imagesettings.properties  logback.xml  META-INF
[root@Jenkins3 resources]# vim dubbo.properties 

 

 打包後:

[root@develop3 conf]# pwd
/opt/service/vancloud-oa-service/conf
[root@develop3 conf]# ls
dubbo.properties
[root@develop3 conf]# vim dubbo.properties

 

能夠看出都能成功獲取到相應環境下的變量值

 

 

二.dubbo+zookeeper+spring整合介紹

dubbo採用全spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用spring加載dubbo的配置便可,dubbo基於spring的schema擴展進行加載。

1.zookeeper安裝 略

2.service端啓動,向zookeeper上註冊URL對象,註冊信息可見spring目錄下文件

3.web端啓動,想zookeeper獲取對象

示例圖:

 

其中service端啓動腳本(官方腳本)以下:略有修改

#!/bin/bash
cd `dirname $0`
BIN_DIR=`pwd`
cd ..
DEPLOY_DIR=`pwd`
CONF_DIR=$DEPLOY_DIR/conf

SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
SERVER_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`

if [ -z "$SERVER_NAME" ]; then
    SERVER_NAME=`hostname`
fi

PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
    echo "ERROR: The $SERVER_NAME already started!"
    echo "PID: $PIDS"
    exit 1
if [ -n "$SERVER_PORT" ]; then
    SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
    if [ $SERVER_PORT_COUNT -gt 0 ]; then
        echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"

LOGS_DIR=""
if [ -n "$LOGS_FILE" ]; then
    LOGS_DIR=`dirname $LOGS_FILE`
else
if [ ! -d $LOGS_DIR ]; then
    mkdir $LOGS_DIR
fi
STDOUT_FILE=$LOGS_DIR/stdout.$(date +%Y-%m-%d).log


LIB_DIR=$DEPLOY_DIR/lib
LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`

JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
JAVA_DEBUG_OPTS=""
if [ "$1" = "debug" ]; then
    JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
fi
JAVA_JMX_OPTS=""
if [ "$1" = "jmx" ]; then
    JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
fi
JAVA_MEM_OPTS=""
BITS=`java -version 2>&1 | grep -i 64-bit`
if [ -n "$BITS" ]; then
    JAVA_MEM_OPTS=" -server -Xmx512m -Xms512m -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70 -DenableProxy=true -DproxyIp=10.51.183.234 -DproxyPort=8888"
else
    JAVA_MEM_OPTS=" -server -Xms1g -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
fi

echo -e "Starting the $SERVER_NAME ...\c"
nohup java $JAVA_OPTS $JAVA_MEM_OPTS $JAVA_DEBUG_OPTS $JAVA_JMX_OPTS -Ddubbo.properties.file=dubbo.properties -classpath $CONF_DIR:$LIB_JARS com.alibaba.dubbo.container.Main 2>&1 | /usr/sbin/cronolog $LOGS_DIR/stdout.%Y-%m-%d.log > /dev/null 2>&1 &



echo "OK!"
PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
echo "PID: $PIDS"
echo "STDOUT: $STDOUT_FILE"

 

web端啓動腳本以下:

#!/bin/sh
cd `dirname $0`
BIN_DIR=`pwd`
cd ..

# 設置項目代碼路徑
CODE_HOME=`pwd`

zookeeper_address='10.51.183.161:2181,10.51.181.181:2181,10.51.180.146:2181'
IPADD=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`


#日誌路徑
export LOG_PATH=$CODE_HOME/logs
mkdir -p $LOG_PATH

# 設置依賴路徑
export CLASSPATH="$CODE_HOME/WEB-INF/classes:$CODE_HOME/WEB-INF/lib/*"

# JVM啓動參數
export JAVA_OPTS="-server -Xms128m -Xmx1g -Xss256k -XX:MaxDirectMemorySize=128m"

#JMX
export JMX="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=17083 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=$IPADD"

# 服務端端口、上下文、項目根配置
export SERVER_INFO="-Dserver.port=7083  -Dserver.contextPath=/  -Dserver.docBase=$CODE_HOME -Ddubbo.registry.address=$zookeeper_address -Dzookeeper.address=$zookeeper_address -DenableProxy=true -DproxyIp=10.51.183.234 -DproxyPort=8888"

# 啓動類
export MAIN_CLASS=com.vgtech.vancloud.web.startup.TomcatBootstrap

#判斷服務是否運行
PIDS=`ps -ef | grep java | grep "server.port=7083" |awk '{print $2}'`
if [ -n "$PIDS" ]; then
    echo "ERROR: The Service already started!"
    echo "PID: $PIDS"
    exit 1
fi

#啓動服務
nohup java $JMX $JAVA_OPTS -classpath $CLASSPATH $SERVER_INFO $MAIN_CLASS 2>&1 | /usr/sbin/cronolog $LOG_PATH/stdout.%Y-%m-%d.log > /dev/null 2>&1 &

#判斷服務是否啓動成功
echo "Service startup success"
PIDS=`ps -ef | grep java | grep "server.port=7083" | awk '{print $2}'`
echo "PID: $PIDS"
echo "STDOUT: $LOG_PATH/stdout.$(date +%Y-%m-%d).log"
相關文章
相關標籤/搜索