svn打tag、Maven+SVN自动打包脚本-linux版

7 篇文章 0 订阅
5 篇文章 0 订阅

完整版,好用

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值