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

  1. <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">
  2. <modelVersion>4.0.0</modelVersion>
  3. <parent>
  4. <groupId>com.danny.vancloud</groupId>
  5. <artifactId>vancloud-cloud-dependencies</artifactId>
  6. <version>1.2.0-SNAPSHOT</version>
  7. </parent>
  8. <artifactId>vancloud-cloud-parent</artifactId>
  9. <version>1.2.0-SNAPSHOT</version>
  10. <name>vancloud-parent</name>
  11. <url>http://maven.apache.org</url>
  12. <packaging>pom</packaging>
  13.  
  14. <properties>
  15. <main.basedir>..</main.basedir>
  16. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  17. </properties>
  18.  
  19. <scm>
  20. <connection>scm:svn:https://192.168.1.244/svn/vancloud/tags/server/打包发布/vancloud-build-all-1.2.0/server/公共依赖</connection>
  21. <developerConnection>scm:svn:https://192.168.1.244/svn/vancloud/tags/server/打包发布/vancloud-build-all-1.2.0/server/公共依赖</developerConnection>
  22. </scm>
  23.  
  24. <profiles>
  25. <profile>
  26. <id>dev</id>
  27. <properties>
  28. <env>dev</env>
  29. <zookeeper.address>localhost:2181</zookeeper.address>
  30. </properties>
  31. <activation>
  32. <activeByDefault>true</activeByDefault>
  33. </activation>
  34. </profile>
  35. <profile>
  36. <id>qa</id>
  37. <properties>
  38. <env>qa</env>
  39. <zookeeper.address>192.168.3.243:2181,192.168.3.152:2181,192.168.3.244:2181</zookeeper.address>
  40. </properties>
  41. </profile>
  42. <profile>
  43. <id>uat</id>
  44. <properties>
  45. <env>uat</env>
  46. <zookeeper.address>192.168.3.162:2181,192.168.3.161:2181,192.168.3.158:2181</zookeeper.address>
  47. </properties>
  48. </profile>
  49. <profile>
  50. <id>product</id>
  51. <properties>
  52. <env>product</env>
  53. <zookeeper.address>10.51.183.161:2181,10.51.181.181:2181,10.51.180.146:2181</zookeeper.address>
  54. </properties>
  55. </profile>
  56. </profiles>
  57.  
  58. <build>
  59.  
  60. <plugins>
  61. <plugin>
  62. <groupId>org.apache.maven.plugins</groupId>
  63. <artifactId>maven-release-plugin</artifactId>
  64. <version>2.5.3</version>
  65. <configuration>
  66. <tagBase>https://192.168.1.244/svn/vancloud/tags/server/公共依赖/</tagBase>
  67. </configuration>
  68. </plugin>
  69. </plugins>
  70. </build>
  71.  
  72. </project>

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

  1. <parent>
  2. <groupId>com.danny.vancloud</groupId>
  3. <artifactId>vancloud-cloud-parent</artifactId>
  4. <version>1.2.0-SNAPSHOT</version>
  5. <relativePath>../vancloud-cloud-parent</relativePath> //通过groupID调用相对路径下的配置文件pom.xml
  6. </parent>
     //其他配置略...

解释:jenkins通过maven打包时,通过-P传入参数qa,maven通过pom.xml打包并调用公共配置得到qa环境zookeeper.address值,并将返回值打入相应war或tar.gz包文件中。

此时可对比看下

dubbo的web端

对于consumer-ems-beans.xml文件

打包前:

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

打包后:

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

dubbo的service端

对于dubbo.properties

打包前:

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

打包后:

  1. [root@develop3 conf]# pwd
  2. /opt/service/vancloud-oa-service/conf
  3. [root@develop3 conf]# ls
  4. dubbo.properties
  5. [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端启动脚本(官方脚本)如下:略有修改

  1. #!/bin/bash
  2. cd `dirname $`
  3. BIN_DIR=`pwd`
  4. cd ..
  5. DEPLOY_DIR=`pwd`
  6. CONF_DIR=$DEPLOY_DIR/conf
  7.  
  8. SERVER_NAME=`sed '/dubbo.application.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
  9. SERVER_PROTOCOL=`sed '/dubbo.protocol.name/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
  10. SERVER_PORT=`sed '/dubbo.protocol.port/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
  11. LOGS_FILE=`sed '/dubbo.log4j.file/!d;s/.*=//' conf/dubbo.properties | tr -d '\r'`
  12.  
  13. if [ -z "$SERVER_NAME" ]; then
  14. SERVER_NAME=`hostname`
  15. fi
  16.  
  17. PIDS=`ps -f | grep java | grep "$CONF_DIR" |awk '{print $2}'`
  18. if [ -n "$PIDS" ]; then
  19. echo "ERROR: The $SERVER_NAME already started!"
  20. echo "PID: $PIDS"
  21. exit
  22. if [ -n "$SERVER_PORT" ]; then
  23. SERVER_PORT_COUNT=`netstat -tln | grep $SERVER_PORT | wc -l`
  24. if [ $SERVER_PORT_COUNT -gt ]; then
  25. echo "ERROR: The $SERVER_NAME port $SERVER_PORT already used!"
  26.  
  27. LOGS_DIR=""
  28. if [ -n "$LOGS_FILE" ]; then
  29. LOGS_DIR=`dirname $LOGS_FILE`
  30. else
  31. if [ ! -d $LOGS_DIR ]; then
  32. mkdir $LOGS_DIR
  33. fi
  34. STDOUT_FILE=$LOGS_DIR/stdout.$(date +%Y-%m-%d).log
  35.  
  36. LIB_DIR=$DEPLOY_DIR/lib
  37. LIB_JARS=`ls $LIB_DIR|grep .jar|awk '{print "'$LIB_DIR'/"$0}'|tr "\n" ":"`
  38.  
  39. JAVA_OPTS=" -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true "
  40. JAVA_DEBUG_OPTS=""
  41. if [ "$1" = "debug" ]; then
  42. JAVA_DEBUG_OPTS=" -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n "
  43. fi
  44. JAVA_JMX_OPTS=""
  45. if [ "$1" = "jmx" ]; then
  46. JAVA_JMX_OPTS=" -Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false "
  47. fi
  48. JAVA_MEM_OPTS=""
  49. BITS=`java -version >& | grep -i -bit`
  50. if [ -n "$BITS" ]; then
  51. 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"
  52. else
  53. JAVA_MEM_OPTS=" -server -Xms1g -Xmx1g -XX:PermSize=128m -XX:SurvivorRatio=2 -XX:+UseParallelGC "
  54. fi
  55.  
  56. echo -e "Starting the $SERVER_NAME ...\c"
  57. 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 >& &
  58.  
  59. echo "OK!"
  60. PIDS=`ps -f | grep java | grep "$DEPLOY_DIR" | awk '{print $2}'`
  61. echo "PID: $PIDS"
  62. echo "STDOUT: $STDOUT_FILE"

web端启动脚本如下:

  1. #!/bin/sh
  2. cd `dirname $`
  3. BIN_DIR=`pwd`
  4. cd ..
  5.  
  6. # 设置项目代码路径
  7. CODE_HOME=`pwd`
  8.  
  9. zookeeper_address='10.51.183.161:2181,10.51.181.181:2181,10.51.180.146:2181'
  10. IPADD=`/sbin/ifconfig -a|grep inet|grep -v 127.0.0.1|grep -v inet6|awk '{print $2}'|tr -d "addr:"`
  11.  
  12. #日志路径
  13. export LOG_PATH=$CODE_HOME/logs
  14. mkdir -p $LOG_PATH
  15.  
  16. # 设置依赖路径
  17. export CLASSPATH="$CODE_HOME/WEB-INF/classes:$CODE_HOME/WEB-INF/lib/*"
  18.  
  19. # JVM启动参数
  20. export JAVA_OPTS="-server -Xms128m -Xmx1g -Xss256k -XX:MaxDirectMemorySize=128m"
  21.  
  22. #JMX
  23. 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"
  24.  
  25. # 服务端端口、上下文、项目根配置
  26. 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"
  27.  
  28. # 启动类
  29. export MAIN_CLASS=com.vgtech.vancloud.web.startup.TomcatBootstrap
  30.  
  31. #判断服务是否运行
  32. PIDS=`ps -ef | grep java | grep "server.port=7083" |awk '{print $2}'`
  33. if [ -n "$PIDS" ]; then
  34. echo "ERROR: The Service already started!"
  35. echo "PID: $PIDS"
  36. exit
  37. fi
  38.  
  39. #启动服务
  40. nohup java $JMX $JAVA_OPTS -classpath $CLASSPATH $SERVER_INFO $MAIN_CLASS >& | /usr/sbin/cronolog $LOG_PATH/stdout.%Y-%m-%d.log > /dev/null >& &
  41.  
  42. #判断服务是否启动成功
  43. echo "Service startup success"
  44. PIDS=`ps -ef | grep java | grep "server.port=7083" | awk '{print $2}'`
  45. echo "PID: $PIDS"
  46. echo "STDOUT: $LOG_PATH/stdout.$(date +%Y-%m-%d).log"

dubbo+zookeeper+jenkins从打包开始的更多相关文章

  1. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

  2. dubbo+zookeeper+spring+springMVC+mybatis的使用

    读前声明:由于本人水平有限,有错误或者描述不恰当的地方请指出来,勿喷!第一次写博客. 源码下载链接:http://files.cnblogs.com/files/la-tiao-jun-blog/du ...

  3. 精华【分布式、微服务、云架构、dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构!

    平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成Dubbo服务管控.Zookeeper注册中心.Redis ...

  4. 分布式架构真正适用于大型互联网项目的架构! dubbo+zookeeper+springmvc+mybatis+shiro+redis

     分类: 分布式技术(3)    目录(?)[+]   平台简介 Jeesz是一个分布式的框架,提供项目模块化.服务化.热插拔的思想,高度封装安全性的Java EE快速开发平台. Jeesz本身集成D ...

  5. dubbo+zookeeper+springBoot框架整合与dubbo泛型调用演示

    dubbo + zookeeper + spring Boot框架整合与dubbo泛型调用演示   By:客 授客 QQ:1033553122  欢迎加入全国软件测试交流 QQ  群:7156436 ...

  6. MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建

    : 一:安装软件:tomcatZookeeperDubbo+admin 二:工程: 总工程  API    Pom.xml:不用引用任何东西  Provider    Pom.xml:要denpend ...

  7. SpringBoot分布式:Dubbo+zookeeper

    西部开源-秦疆老师:SpringBoot + Dubbo + zookeeper 秦老师交流Q群号: 664386224 未授权禁止转载!编辑不易 , 转发请注明出处!防君子不防小人,共勉! 基础知识 ...

  8. springboot整合dubbo+zookeeper最新详细

    引入 最近和小伙伴做一个比赛,处于开发阶段,因为涉及的服务比较多,且服务需要分开部署在不同的服务器上,讨论之后,打算采用分布式来做,之前学习springboot的时候,部分章节涉及到了springbo ...

  9. 【java框架】SpringBoot(5)--SpringBoot整合分布式Dubbo+Zookeeper

    1.理论概述 1.1.分布式 分布式系统是若干独立计算机的集合,这些计算机对于用户来讲就像单个系统. 由多个系统集成成一个整体,提供多个功能,组合成一个板块,用户在使用上看起来是一个服务.(比如淘宝网 ...

随机推荐

  1. JDK源码分析(2)之 Array 相关

    在深入了解 Array 之前,一直以为 Array 比较简单,但是深入了解后才发现其实挺复杂的.所以我把重要的写在最前面,但凡遇到和语言本身相关的问题,都可以查阅 Java Language and ...

  2. [Javascript] encodeURIComponent()方法

    在vue項目中使用vue-router通过url进行传值 encodeURIComponent encodeURIComponent() 函数可把字符串作为 URI 组件进行编码.encodeURIC ...

  3. 如何使用git和ssh部署本地代码到服务器

    一.首先设置好自己本地的Git用户名和密码: git config --global user.name "your name" git config --global user. ...

  4. 百度官方CDN公共库(jquery、dojo、Bootstrap)

    CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用.与将JS库存放在服务器单机上相比,CDN公共库更加稳定.高速. 百度公共CDN为您的应用程序提供稳定.可靠.高速的服务,包含全 ...

  5. Maven初解--依赖查找方法

    Maven可以实现对项目中的JAR包的版本管理,项目组成员公用一个Maven仓库(通过配置Maven的setting.xml文件,本地仓库和远程仓库,如果在本地仓库没有找到依赖的JAR,就会从远程仓库 ...

  6. [C#学习笔记3]关于Main(string[ ] args)中args命令行参数

    Main(string[] args)方法是C#程序的入口,程序从这里开始执行,在这里结束.C#代码逻辑要包含在一个类型(Type)中,游离的.全局的变量或函数是不存在的,这里的类型包括类(class ...

  7. android WebView技术笔记(存储技术)

    作为刚刚开始工作的新手程序猿,各种知识还不算熟练,所以将学习到的知识记录一下以免以后忘记. WebView加载h5的知识现在可以说非常的常用,通过加载h5的网页可以在不更新app的情况下来更新app的 ...

  8. Java-获取年月日对应的天干地支

    一.概述 本次是以java语言开发为例,计算出年月日对应的天干地支. 二.代码 public class MyDate { /** * 对于年月日的天干地支 */ private int year_g ...

  9. packagereference 里面的资产是怎么回事?

    <PackageReference Include="Newtonsoft.Json" Version="9.0.1"> <ExcludeAs ...

  10. UDK Stat命令

    Stat命令(chs  en)提供了游戏和引擎各个方面的实时统计信息,输入不同参数会在屏幕HUD上显示对应统计数据. 非Shipping版的UDK才会启用STATS宏,统计逻辑才会编译进exe,才能使 ...