dubbo+zookeeper+jenkins从打包开始
一.jenkins中maven构建
有如下图构建设置


解释说明:
pom.xml
此处jenkins打包依赖的主要配置文件(规则)
settings.xml
全局配置文件,主要用于配置maven的运行环境等一系列通用的属性
clean package -Pqa -DskipTests=true
清class文件,打包构建,传参qa打包( -Pqa ,此处的qa为配置文件中设置的测试环境参数,-P选项 maven 会激活项目下的pom.xml配置的<profiles>标签下id为qa,如下图),以及最后的跳过测试。

pom.xml文件,目录关系如下,vancloud-cloud-parent为公共配置目录,配置有多环境参数变量。

此项目打包时通过自己的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 $`
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
if [ -n "$SERVER_PORT" ]; then
SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
if [ $SERVER_PORT_COUNT -gt ]; 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 >& | grep -i -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 >& | /usr/sbin/cronolog $LOGS_DIR/stdout.%Y-%m-%d.log > /dev/null >& & 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 $`
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
fi #启动服务
nohup java $JMX $JAVA_OPTS -classpath $CLASSPATH $SERVER_INFO $MAIN_CLASS >& | /usr/sbin/cronolog $LOG_PATH/stdout.%Y-%m-%d.log > /dev/null >& & #判断服务是否启动成功
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"
dubbo+zookeeper+jenkins从打包开始的更多相关文章
- 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...
原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...
- dubbo+zookeeper+spring+springMVC+mybatis的使用
读前声明:由于本人水平有限,有错误或者描述不恰当的地方请指出来,勿喷!第一次写博客. 源码下载链接:http://files.cnblogs.com/files/la-tiao-jun-blog/du ...
- 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!
平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis ...
- 分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis
分类: 分布式技术(3) 目录(?)[+] 平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成D ...
- dubbo+zookeeper+springBoot框架整合与dubbo泛型调用演示
dubbo + zookeeper + spring Boot框架整合与dubbo泛型调用演示 By:客 授客 QQ:1033553122 欢迎加入全国软件测试交流 QQ 群:7156436 ...
- MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建
: 一:安装软件:tomcatZookeeperDubbo+admin 二:工程: 总工程 API Pom.xml:不用引用任何东西 Provider Pom.xml:要denpend ...
- SpringBoot分布式:Dubbo+zookeeper
西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...
- springboot整合dubbo+zookeeper最新详细
引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...
- 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper
1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...
随机推荐
- LindAgile.SchedulingTask~设计一个不错的任务调度组件
回到目录 SchedulingTask产生的原因 任务调试主要指定期执行某些任务代码,之前用过quartz,感觉有些重,使用时需要添加包包,配置管理项时,对于简单的项目用它就显得有些臃肿了,不如直接上 ...
- javascript 倒计数功能
最近在项目中遇到一个倒计时功能,在网上没有找到合适的,就自己写了个方法.贴在这里,权且当个记录. export const timeRun = (timeStr, callBack) => { ...
- 菜鸟先飞C#学习总结(一)
一.第一个程序Hellow Word using System; //using 关键字用于在程序中包含 System 命名空间. 一个程序一般有多个 using 语句. using System.C ...
- C#保留2位小数几种场景总结
场景1: C#保留2位小数,.ToString("f2")确实可以,但是如果这个数字本来就小数点后面三位比如1.253,那么转化之后就会变成1.25.可不可以刚好保留到最后一位不是 ...
- 文本三剑客---awk(gawk)基础
gawk程序是Unix中原始awk程序的GNU版本.gawk程序让流编辑器迈上了一个新的台阶,它提供了一种编程语言而不只是编辑器命令.在gawk编程语言中,可以完成下面的事情: (1)定义变量来保存数 ...
- 倒计时5S秒自动关闭弹窗
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 前端入门24-响应式布局(BootStrap)
声明 本篇内容摘抄自以下两个来源: BootStrap中文网 感谢大佬们的分享. 正文-响应式布局(BootStrap) 这次想来讲讲一个前端开发框架:BootStrap BootStrap 目前已经 ...
- 小tips:你不知道的 npm init
前言 在现代新建一个 JS 相关的项目往往都是从 package.json 文件开始的,不过这个文件里需要的字段实在是太多了,正常人都记不住,所以 npm 官方提供了 npm init 命令帮助我们快 ...
- Dynamics 365中极特殊语言的文字搜索结果异常
微软动态CRM专家罗勇 ,回复316或者20190314可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 有些比较少见的问题, ...
- IDEA中的.iml文件和.idea文件夹
.iml文件 iml文件是IntelliJ IDEA自动创建的模块文件,用于Java应用开发,存储一些模块开发相关的信息,比如一个Java组件,插件组件,Maven组件等等,还可能存储一些模块路径信息 ...