2019独角兽企业重金招聘Python工程师标准>>>

1.主要功能

A.自动化编译和构建指定工程,并且将制品发布到maven私服

B.自动化更新工程版本号(开发版本号以及release版本号)

C.自动打release tag

D.根据指定的项目配置(profile), 自动分发部署项目到所有服务器

2.技术实现

2.1 准备

我会根据一个项目从头到尾搭建,来阐述使用方法

2.2 POM配置

必须采用maven构建,其中项目的pom.xml配置必须包含如下关键配置:

2.2.1  scm相关配置

主要用来让maven可以完成自动从svn下载代码并打tag使用

<scm>                                                                                               <connection>scm:svn:svn://scm.domain:18080/svn/AppDemo/trunk</connection>            <developerConnection>scm:svn:svn://scm.domain:18080/svn/AppDemo/trunk</developerConnection>
</scm>

2.3 maven-release-plugin配置

使用maven-release-plugin主要完成项目的自动打tag和创建branch

<build>

<finalName>AppDemo</finalName>

<plugins>

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-release-plugin</artifactId>

<version>2.2.2</version>

<configuration>

<tagBase>svn://scm.domain:18080/svn/AppDemo/tags</tagBase>

<branchBase>svn://scm.domain:18080/svn/AppDemo/branches</branchBase>

<mavenExecutorId>forked-path</mavenExecutorId>

</configuration>

</plugin>

</plugins> 吧

</build>

2.3 profile配置

为了项目适应不同环境配置,maven提供了profile的概念,每个项目可以有多个不同的profile, 可以针对每个profile有不同的参数配置,比较常用的就是测试环境和线上环境
           会采用不同的配置参数,那么就可以在pom.xml中增加test和production 2个profile, 具体配置如下:

<!--  针对不同运行环境的配置-->

<profiles><profile><id>test</id><activation><activeByDefault>true</activeByDefault></activation><properties><active.profile.id>test</active.profile.id><db.url>jdbc:mysql://xx.xx.xx.xxx:3306/cms2</db.url><db.user>test</db.user><db.password>test</db.password><mq.address>xx.x.xx.x:61616</mq.address><cms.url>http://10.1.30.225/cms2/compile.action</cms.url></properties></profile><profile><id>product</id><activation><activeByDefault>false</activeByDefault></activation><properties><active.profile.id>product</active.profile.id><db.url>jdbc:mysql://host/cms</db.url><db.user>production</db.user><db.password>production</db.password><mq.address>xx.xx.xxx:61616</mq.address><cms.url>http://xx.xx.xxx/compile.action</cms.url></properties></profile></profiles>

然后配置POM文件中resources配置

<resources><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource>
</resources>

3.构建部署脚本

3.1 自动构建脚本

完成主要功能的1、2、3功能点,主要调用maven的2个主要命令: mvn release:prepare和mvn release:perform来完成,具体脚本内容如下:

#!bin/bash
if [ "$1" == 'help' ];thenecho "Usage: $0 tag(optional) releaseVersion(optional) developmentVersion(optional)"echo "examples: "echo "$0"echo "$0 vis-1.1.25 1.1.25 1.1.26-SNAPSHOT"echo "$0 vis-1.1.25"echo "$0 vis-1.1.25 1.1.25"exit 0
fi
#项目目录
JDEPLOY_HOME=`dirname $(cd "$(dirname "$0")"; pwd)`
#构建工程名称
PROJECT_NAME=AppDemo
#构建目录
BUILD_HOME=$JDEPLOY_HOME/data/build
#SVN_URL
SVN_URL=https://scm.domain:18080/svn/AppDemo/trunk#CHECKOUT项目
BUILD_PROJECT_PATH=$BUILD_HOME/$PROJECT_NAME
rm -rf $BUILD_PROJECT_PATH
svn checkout $SVN_URL $BUILD_PROJECT_PATH
cd $BUILD_PROJECT_PATHTAG_VERSION=$1
RELEASE_VERSION=$2
DEV_VERSION=$3
MVN_RELEASE_COMMAND="mvn -B release:prepare "
if [ "$TAG_VERSION" != "" ];thenMVN_RELEASE_COMMAND="${MVN_RELEASE_COMMAND} -Dtag=${TAG_VERSION}"
fi
if [ "$RELEASE_VERSION" != "" ];thenMVN_RELEASE_COMMAND="${MVN_RELEASE_COMMAND} -DreleaseVersion=${RELEASE_VERSION}"
fi
if [ "$DEV_VERSION" != "" ];thenMVN_RELEASE_COMMAND="${MVN_RELEASE_COMMAND} -DdevelopmentVersion=${DEV_VERSION}"
fi
echo ${MVN_RELEASE_COMMAND}
eval ${MVN_RELEASE_COMMAND}
##这里只想release:perform命令
mvn release:perform

3.2 自动部署脚本

#!/bin/sh
if [ $# -lt 1 ];thenecho "Usage: $0 tagName profile(optional)"exit 1
fi
#项目目录
JDEPLOY_HOME=`dirname $(cd "$(dirname "$0")"; pwd)`#构建项目名称
PROJECT_NAME=AppDemo
#构建目录
BUILD_HOME=$JDEPLOY_HOME/data/build
echo $BUILD_HOME
#部署目录
DEPLOY_HOME="/data/java"
#项目版本
SVN_TAG=$1
#目标IP
IP=10.121.49.131
#SVN资源库地址
SVN_PRO=https://scm.domain:18080/svn/AppDemo/tags/$PROJECT_NAME-${SVN_TAG}#CHEK OUT项目
BUILD_PROJECT_PATH=$BUILD_HOME/$PROJECT_NAME
rm -rf $BUILD_PROJECT_PATH
svn checkout $SVN_PRO $BUILD_PROJECT_PATH
cd $BUILD_PROJECT_PATH
MAVEN_PROFILE=${2:-test}
echo $MAVEN_PROFILE
echo Maven构建$PROJECT_HOME项目
mvn clean package -Dmaven.test.skip=true -P ${MAVEN_PROFILE}
#远程部署
DEPLOY_PROJECT_PATH=$DEPLOY_HOME/$PROJECT_NAME
ssh root@$IP "rm -rf $DEPLOY_PROJECT_PATH/* && mkdir -p $DEPLOY_PROJECT_PATH"
scp $BUILD_PROJECT_PATH/target/$PROJECT_NAME.war root@${IP}:$DEPLOY_PROJECT_PATH/$PROJECT_NAME.war
ssh root@${IP} "mkdir -p $DEPLOY_PROJECT_PATH; cd $DEPLOY_PROJECT_PATH; unzip $PROJECT_NAME.war && rm -f $PROJECT_NAME.war"
ssh root@${IP} "/usr/local/tomcat/bin/restart.sh"

3.3 tomcat 重启脚本

#!/bin/sh
TOMCAT_PATH=`dirname "$0"`echo "TOMCAT_PATH is $TOMCAT_PATH"PID=`ps aux | grep tomca[t] | grep jav[a] | awk '{print $2}'`if [ -n "$PID" ]; thenecho "Will kill tomcat: $PID"sh "$TOMCAT_PATH/shutdown.sh"sleep 6
else echo "No Tomcat Process $PID"
fiPID=`ps aux | grep tomca[t] | grep jav[a] | awk '{print $2}'`while [ -n "$PID" ]; dokill  $PID && sleep 1echo "Try to kill $PID"PID=`ps aux | grep tomca[t] | grep jav[a] | awk '{print $2}'`
done
#test -n $PID && kill $PID && sleep 1sh "$TOMCAT_PATH/startup.sh"
sleep 3PID=`ps aux | grep tomca[t] | grep jav[a] | awk '{print $2}'`
if [ -n "$PID" ]; thenecho "\nRestart tomcat successfully!"
elseecho "\nFail to startup tomcat"exit 1
fi

4.案例演示

4.1.创建web项目

mvn archetype:create -DgroupId=com.bswan -DartifactId=AppDemo -DarchetypeArtifactId=maven-archetype-webapp

4.2 调整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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.bswan</groupId><artifactId>AppDemo</artifactId><packaging>war</packaging><version>1.5-SNAPSHOT</version><name>AppDemo Maven Webapp</name><url>http://maven.apache.org</url><scm><connection>scm:svn:https://scm.domain:18080/svn/AppDemo/trunk</connection><developerConnection>scm:svn:https://scm.domain:18080/svn/AppDemo/trunk</developerConnection></scm><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency></dependencies><profiles><profile><id>test</id><activation><activeByDefault>true</activeByDefault></activation><properties><active.profile.id>test</active.profile.id><db.url>jdbc:mysql://xx.xx.xx.xxx:3306/cms2?useUnicode=true&amp;autoReconnect=true&amp;characterEncoding=UTF8</db.url><db.user>test</db.user><db.password>test</db.password><mq.address>xx.x.xx.x:61616</mq.address><cms.resource.compile.url>http://10.1.30.225/cms2/compile.action</cms.resource.compile.url></properties></profile><profile><id>product</id><activation><activeByDefault>false</activeByDefault></activation><properties><active.profile.id>product</active.profile.id><db.url>jdbc:mysql://:6080/cms2?useUnicode=true&amp;autoReconnect=true&amp;characterEncoding=UTF8</db.url><db.user>production</db.user><db.password>production</db.password><mq.address>xx.xx.xxx:61616</mq.address><cms.resource.compile.url>http://xx.xx.xxx/compile.action</cms.resource.compile.url></properties></profile></profiles><build><finalName>AppDemo</finalName><resources><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include><include>**/*.properties</include></includes><filtering>true</filtering></resource></resources><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-release-plugin</artifactId><version>2.2.2</version><configuration><tagBase>https://scm.domain:18080/svn//AppDemo/tags</tagBase><branchBase>https://scm.domain:18080/svn//AppDemo/branches</branchBase><mavenExecutorId>forked-path</mavenExecutorId></configuration></plugin></plugins></build></project>

4.3 增加配置文件

在src/main/resources 下创建jdbc.properties文件

jdbc.driver=com.mysql.jdbc.Driver
db.url=${db.url}
db.user=${db.user}
db.password=${db.password}
mq.address=${mq.address}
cms.url=${cms.url}

4.4 上传SVN

svn import -m "AppDemo init" AppDemo  https://scm.domain :18080/svn/AppDemo/trunk

4.5  构建

4.5.1 配置

进入构建工具JDeploy/bin目录,初始pom.xml记录项目版本是 1.5-SNAPSHOT,目前该工具完善中,使用它可能需要手动修改这些配置

#构建工程名称
PROJECT_NAME=AppDemo
#构建目录
BUILD_HOME=$JDEPLOY_HOME/data/build
#SVN资源库地质
SVN_URL=https://scm.domain:18080/svn/AppDemo/trunk

4.5.2 执行

该执行自动发布版本

sh jrelease.sh

或者

sh jrelease.sh AppDemo-1.0 1.0 1.1-SNAPSHOT

参数说明:

AppDemo-1.0: 表示发布到tags版本名称

1.0  表示发布版本

1.1-SNPSHOT 表示下一个版本号

4.4 部署

4.4.1 配置

#构建项目名称
PROJECT_NAME=AppDemo
#构建目录
BUILD_HOME=$JDEPLOY_HOME/data/build
#部署目录
DEPLOY_HOME="/data/java"
#项目版本
SVN_TAG=$1
#目标IP
IP=10.121.49.131
#SVN资源库地址
SVN_PRO=https://scm.domain:18080/svn/AppDemo/tags/$PROJECT_NAME-${SVN_TAG}

4.4.2 远程Tomcat配置

Tomcat部署方式有四种,这里采用其中之一,在conf/localhost配置方式.进入 /usr/local/tomcat/conf/Catalina/localhost 目录下 创建一个ROOT.xml配置文件

<?xml version='1.0' encoding='utf-8'?>
<Context path="/ROOT" docBase="/data/java/AppDemo" debug="0" privileged="true"/>

PATH 值要和这个XML文件名称一致

docBase 值是DEPLOY_HOME值

4.4.3 执行

执行部署,会自动将指定的版本工程,下载编译,传到你目标机器上,并通过调用restart.sh 重启tomcat.

sh jdeploy.sh 1.6

5.代码下载

JDeploy 下载地址: https://git.oschina.net/blackswan/JDeploy.git

JDeployDemo下载地址:https://git.oschina.net/blackswan/AppDemo.git

转载于:https://my.oschina.net/guoenzhou/blog/394276

基于maven自动构建和部署工具-JDeploy相关推荐

  1. 用Ant实现Java项目的自动构建和部署

        Ant是一个Apache基金会下的跨平台的构件工具,它可以实现项目的自动构建和部署等功能.在本文中,主要让读者熟悉怎样将Ant应用到Java项目中,让它简化构建和部署操作. 一.        ...

  2. 构建指定仓库_使用Travis CI自动构建和部署你的GitBook

    本文,博主将会介绍利用Travis CI持续集成服务自动化构建和部署GitBook. 首先介绍一下TravisCI,下文摘自维基百科-Travis CI Travis CI是在软件开发领域中的一个在线 ...

  3. 怎么把项目推到gitlab上_Gitlab利用Webhook+jenkins实现自动构建与部署

    之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布. 这种方式每次在发版的时候,需要人工去执行j ...

  4. 【完整示例】采用jenkins pipeline实现自动构建并部署至k8s

    前言 在日常开发中,经常会有发布的需求,而且经常会碰到各种环境,比如:开发环境.测试环境.生产环境.虽然可以使用手动构建.上传服务器部署的方式,但在微服务架构下一个项目经常包含多个微服务的部署,如果用 ...

  5. gitlab 自动推送代码到gitee_Gitlab 利用 Webhook+jenkins 实现自动构建与部署

    之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布. 这种方式每次在发版的时候,需要人工去执行j ...

  6. linux maven自动构建,Centos7.3+Jenkins+Git+Maven 自动化构建部署项目

    第一步 禁止 SELINUX 访问控制 修改配置之前先备份(良好习惯) sudo cp /etc/selinux/config /etc/selinux/config.bak 备份后,修改selinu ...

  7. Maven自动FTP远程部署

    参照官网文档: https://maven.apache.org/plugins/maven-deploy-plugin/examples/deploy-ftp.html 1.在pom.xml中加入: ...

  8. 基于maven自动发布-Maven Wagon

    发布方式 手工方式:需要做一系列的工作,上传到服务器,停止服务,删除旧文件,移动文件,启动服务等. 自动方式:一条命令完成以上所有过程 pom.xml <extensions><ex ...

  9. 【手把手教学】基于Maven构建方式使用Mybatis generator自动生成

    简介 Mybatis generator是一种代码生成器, 可以基于数据库表的字段与类型,自动生成Java代码中对应的entity类.dao类.mapper映射文件. 实现Mybatis genera ...

  10. 使用Docker+Jenkins自动构建部署

    转载自 https://segmentfault.com/a/1190000012921606 环境 阿里云ESC,宿主机服务器安装Docker,在安全规则中确认8080端口开启. 客户端mac 运行 ...

最新文章

  1. 微软亚洲研究院王井东:下一代视觉识别的通用网络结构是什么样的?
  2. Oracle Exadata 一体机关机过程(虚拟机环境)
  3. 未来经济 数字优先 | 大数据专场
  4. es6新增的html标签,javascript – 如何导入已在html中的标签中定义的es6模块?
  5. python还是java好找工作_你觉得学 Python 还是 Java 更好找工作?
  6. ELK下钉钉邮件告警通知
  7. ie下使用frameset布局导致跨域cookie丢失问题解决
  8. DJANGO输出HIGHCHARTS数据的样例
  9. 神经系统的肿瘤有哪些,脑神经肿瘤最常见的是
  10. 基于原语的千兆以太网RGMII接口设计
  11. 用C语言打印菱形图案
  12. php 汉字、字母验证码 例子
  13. python爬取北京租房信息
  14. 开源中国源码学习UI篇(一)之FragmentTabHost的使用分析
  15. 附件 计算机 丢失,Win10系统开始菜单中没有附件解决方法
  16. 记一次mysql数据库转储sql文件到另外一台电脑运行失败的解决办法
  17. dreamware选择HTML4类型,第十一章 dreamware数据源设计.docx
  18. 供应链中的安全库存(二)——Z值在安全库存中的应用
  19. 【SSL_P1502】校门外的树
  20. kaldi的egs/sitw实验调试过程(ssh.pl并行两台机器)

热门文章

  1. 第五章 政策问题与议程设定
  2. DDNS动态域名解析
  3. 小程序实现城市搜索功能
  4. 【清华AI自强计划-计算机视觉课程-第三讲课程笔记1】
  5. Angular基本概念及用法总结
  6. 5g是多大一勺_5g是多大一勺(5克的勺子有多大)
  7. 数据分析 - 安然事件
  8. 第二十五天 正则表达式
  9. 微软邮箱smtp服务器,微软hotmail免费邮箱申请(5G邮箱容量) 支持pop3、smtp
  10. java出现令牌语法错误_java – 令牌上的语法错误