完整版,好用
1.svn打tag脚本
#!/bin/sh
echo [INFO] Tag project.
#SVN打标签Linux批处理脚本
# 项目所在路径:(例:"http://127.0.0.1/svn/branches/01 Project_Branches/2019.myproject/myproject")
project_url=$1
# Tag路径:(例:"https://127.0.0.1/svn/tags/2020/Deployment/myproject")
tag_path=$2
if [ "$project_url" == "" ]; then
read -p "[INFO] Please input the project url:" project_url
fi
if [ "$tag_path" == "" ]; then
read -p "[INFO] Please input the tag path:" tag_path
fi
if [ "$project_url" == "" ]; then
echo [WARN] project_url not exsit!
exit 0
fi
if [ "$tag_path" == "" ]; then
echo [WARN] tag_path not exsit!
exit 0
fi
# 去掉字符串最后一个斜杠(如果最后一个字符是斜杠)
project_url=${project_url%*/}
echo [INFO] project_url: $project_url
tag_path=${tag_path%*/}
echo [INFO] tag_path: $tag_path
# 项目名
project_name=${project_url##*/}
if [ "$project_name" == "" ]; then
echo [WARN] project_name failed to get!
exit 0
fi
#Last Changed Rev: 指定path最后一次更改的revision号
svnRev=`svn info "${project_url}" | grep -E "Last Changed Rev:|最后修改的版本:" | grep "[0-9]*"`
version=`echo ${svnRev}|grep -o '[0-9]\+'`
echo [INFO] SVN Revision:${version}.
if [ "$version" == "" ]; then
echo [WARN] SVN version failed to get!
exit 0
fi
#获取当前时间
dateTime=`date +%Y%m%d`
#tag项目名
tag_project_name="${project_name}-r${version}b${dateTime}"
echo [INFO] Tag project name:${tag_project_name}.
#强制删除文件夹"项目名_r版本号b当前日期"
echo [INFO] Delete the dir:${tag_path}/${tag_project_name}.
svn rm ${tag_path}/${tag_project_name} -m "delete tags ${tag_project_name}"
#拷贝项目,项目名:"项目名_r版本号b当前日期"
echo [INFO] Begin tag project...
svn cp "${project_url}" "${tag_path}/${tag_project_name}" -m "somedir tags ${tag_project_name}"
if [ $? -ne 0 ]; then
echo [INFO] Tag project Failed.
exit 0
else
echo [INFO] Tag project succeed.Tag url:"${tag_path}/${tag_project_name}"
fi
2.导出svn代码、加入svn版本号打包项目
#!/bin/sh
echo [INFO] Package tag project.
# 临时修改JDK使用的版本,myproject需要使用JDK1.7
export JAVA_HOME=/usr/local/java/jdk1.7.0_76
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
# Tag project路径:(例:"https://127.0.0.1/svn/tags/2020/Deployment/myproject/myproject-r11111b20200612")
tag_project_url=$1
# 项目导出位置,默认为当前目录
workspace=$(cd `dirname $0`; pwd)
if [ "$tag_project_url" == "" ]; then
read -p "[INFO] Please input the tag project path:" tag_project_url
fi
if [ "$tag_project_url" == "" ]; then
echo [WARN] tag_project_url does not exsit!
exit 0
fi
echo [INFO] tag_project_url: $tag_project_url
echo [INFO] the workspace that the project export: $workspace
# 去掉字符串最后一个斜杠(如果最后一个字符是斜杠)
tag_project_url=${tag_project_url%*/}
#svn版本号(截取掉r之前的所有,b之后的所有)
vtemp=${tag_project_url#*-r}
version=${vtemp%b*}
echo [INFO] SVN version:${version}
if [ "$version" == "" ]; then
echo [WARN] SVN version failed to get!
exit 0
fi
# 项目名
tag_project_name=${tag_project_url##*/}
if [ "$tag_project_name" == "" ]; then
echo [WARN] tag_project_name failed to get!
exit 0
fi
#删除目录${tag_project_name}
echo [INFO] Delete the dir "${workspace}/${tag_project_name}" if exsits.
rm -rf "${workspace}/${tag_project_name}"
#创建项目目录
echo [INFO] Mkdir:${workspace}/${tag_project_name}
mkdir ${workspace}/${tag_project_name}
cd ${workspace}/${tag_project_name}
#检出项目
echo [INFO] Begin export source project from svn server.Please wait......
svn checkout -q --force ${tag_project_url} ${workspace}/${tag_project_name}
echo [INFO] Finished export source project from svn server.
#替换pom.xml文件中的${buildNumber}为version
sed -i 's#${buildNumber}#'${version}'#g' ${workspace}/${tag_project_name}/pom.xml
#清除目标文件夹、编译、打包
mvn clean package
# #获取当前时间
# Time=`date +"%Y%m%d%H%M%S"`
# #清除目标文件夹、编译、打包
# mvn clean package | tee ${tag_project_name}${Time}
# # 文件中查找 BUILD SUCCESS 字眼
# result=`grep 'BUILD SUCCESS' ${tag_project_name}${Time}`
# # 如果结果为空那就是失败,否则就成功了
# if [ -z "$result" ];
# then
# echo [WARN] Auto-Package project failed.
# exit 0
# else
# echo [INFO] Finished Auto-Package project:${tag_project_url}.
# fi
3.合并执行1和2
#!/bin/sh
# 项目所在路径:(例:"http://127.0.0.1/svn/branches/01 Project_Branches/2019.myproject/myproject")
project_url=$1
# Tag路径:(例:"https://127.0.0.1/svn/tags/2020/Deployment/myproject")
tag_path=$2
#执行打tag脚本
source ./tag_project.sh "${project_url}" "${tag_path}"
tag_project_name=${tag_project_name}
tag_path=${tag_path}
#执行打包脚本
source ./package_project.sh "${tag_path}/${tag_project_name}"
执行
说明:
1.tag_project.sh
功能:将project以最新版本打tag
参数:(1)svn project url (2)导出的tag路径
执行:方法1:./tag_project.sh “http://127.0.0.1/svn/branches/01 Project_Branches/2019.myproject/myproject” “https://127.0.0.1/svn/tags/2020/Deployment/myproject”
方法2:执行./tag_project.sh,根据提示传入这2个参数
注意:(1)由于第一个参数有空格,所以第一个参数必须使用“”。
2.package_project.sh
功能:打包project。执行过程:设置打包路径,项目导出,加入版本号,打包。
参数:(1)打包的tag project url
执行:方法1:./package_project.sh https://127.0.0.1/svn/tags/2020/Deployment/myproject/myproject-r11111b20200612
方法2:执行./package_project.sh,根据提示传入参数
注意:由于myproject需要使用jdk1.7,脚本里把jdk版本写固定了,如果打包其他项目,请修改脚本相应位置。
3.package_tag_project.sh
功能:合并执行1和2
参数:同1
执行:方法1:./package_tag_project.sh “http://127.0.0.1/svn/branches/01 Project_Branches/2019.myproject/myproject” “https://127.0.0.1/svn/tags/2020/Deployment/myproject”
方法2:执行./package_tag_project.sh,根据提示传入这2个参数
附:pom.xml里svn打版本号相应代码
<scm>
<connection>scm:svn:https://127.0.0.1/svn/myproject/branches/01%20Project_Branches/myproject</connection>
<developerConnection>scm:svn:https://127.0.0.1/svn/myproject/branches/01%20Project_Branches/myproject</developerConnection>
<tag>HEAD</tag>
<url>https://127.0.0.1/svn/myproject/branches/01%20Project_Branches/myproject</url>
</scm>
<dependencies>……</dependencies>
<build>
<plugins>
<!-- Maven自带时间戳使用${maven.build.timestamp},但是时区是UTC,需要改成使用GMT+8时区 -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<id>timestamp-property</id>
<goals>
<goal>timestamp-property</goal>
</goals>
<configuration>
<name>build.time</name>
<pattern>yyyy-MM-dd HH:mm:ss</pattern>
<locale>zh_CN</locale>
<timeZone>GMT+8</timeZone>
</configuration>
</execution>
</executions>
</plugin>
<!-- 打包时,将SVN版本号和创建时间写到文件MANIFEST.MF -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<doCheck>false</doCheck>
<doUpdate>true</doUpdate>
</configuration>
<dependencies>
<dependency>
<groupId>com.google.code.maven-scm-provider-svnjava</groupId>
<artifactId>maven-scm-provider-svnjava</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.tmatesoft.svnkit</groupId>
<artifactId>svnkit</artifactId>
<version>1.8.10</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<resourceEncoding>UTF-8</resourceEncoding>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
<manifestEntries>
<SVN-Version>${buildNumber}</SVN-Version>
<Created-Time>${build.time}</Created-Time>
</manifestEntries>
</archive>
</configuration>
</plugin>
</plugins>
</build>
windows版脚本见https://blog.csdn.net/zltAlma/article/details/107002388
相关链接:https://www.cnblogs.com/zeng1994/p/3a32e18355e85640e6df307c7f7a5429.html
https://blog.csdn.net/a1010256340/article/details/76084403