需求
公司每次升级正式环境都是对着项目各个模块进行单独打包。
现在公司希望使用shell脚本来批量的自动打包,以减少人工出错的情况。
思路
①我会先对整个项目进行javac
编译,把编译后的.class
文件放到classes
文件夹中。
②再cd
进入到v1
文件夹中,获得文件夹v1下所有的文件夹名。
因为到时打jar包时,需要模糊匹配相关路径下的.class文件。
并且打jar包格式:ggservice-文件夹名.jar
的形式。
for
循环得到的文件夹名,进行打jar
包。
得到某目录下中全部文件夹名的方法
参考链接:
http://blog.csdn.net/sidely/article/details/40426725
方法一
#!/bin/bash
dir=$(ls -l D:/temp/ |awk '/^d/ {print $NF}')
for i in $dir
do
echo $i
done
方法二
for dir in $(ls D:/tmep/)
do
[ -d $dir ] && echo $dir
done
方法三
ls -l D:/temp/ |awk '/^d/ {print $NF}'
其实同方法一,直接就可以显示不用for循环
剩下的就简单啦!直接上全部代码:
下面的代码是写在jenkins
中的Execute shell
中的脚本:
#!/bin/bash
export PATH=~/play-1.2.7:$PATH
#获得当前目录
cur=$(pwd)
echo "pwd:"${cur}
fileName=${WORKSPACE##*/}
echo "当前工作空间目录名称:"${fileName}
rm -rf ggservice-dataservice.jar
output_path=${cur}/classes
package=${cur}/package
echo $output_path
if [ ! -d $output_path ]; then
mkdir $output_path
fi
if [ ! -d $package ]; then
mkdir $package
fi
## 获取依赖库和需要编译的java文件
export libs=`find ./dataservice/lib -name "*.jar" |xargs|sed "s/ /:/g"`
export javafiles=`find ./dataservice/ -name "*.java" |xargs|sed "s/ / /g"`
export javautils=`find ./utils/app/ -name "*.java" |xargs|sed "s/ / /g"`
export play_lib=/opt/play-1.2.7/framework/play-1.2.7.jar
export play_lib_common=`find /opt/play-1.2.7/framework/lib/ -name "*.jar" |xargs|sed "s/ /:/g"`
#echo ${javafiles}
#echo "公共---------"
#echo ${javautils}
# 清除
rm -rf package/*
# 清除编译后的class文件
rm -rf ${output_path}/*
# 编译
tc=`javac -d ${cur}/classes -cp ${libs}:$play_lib:$play_lib_common -encoding utf-8 ${javafiles} ${javautils} 2>&1`
if [[ "x" != "x$tc" ]] && [[ "$tc" =~ "错误" || "$tc" =~ "error" ]]
then
echo "javac 编译出错"
echo "$tc"
exit 1
else
echo "javac 编译成功"
echo "$tc"
fi
# 分批打包
#cd /home/jenkins/workspace/ggservice/dataservice/app/ggservice/v1/
cd /home/jenkins/workspace/ggservice-pre-jar/dataservice/app/ggservice/v1
dir=$(ls -l |awk '/^d/ {print $NF}')
cd $output_path
for i in $dir
do
echo "ggservice-"${i}".jar打包情况":
jar -cvf ${package}/ggservice-${i}.jar */v1/$i/*
done
# 对公共基础包进行打包
export baseclass=`find ./ -path '*/ggservice/common/*.class' -o -path '*/ggservice/constant/*.class'`
echo "ggservice-base.jar 打包情况":
jar -cvf ${package}/ggservice-base.jar ${baseclass}
# 对Model包进行打包
export modelclass=`find ./ -path '*/ggservice/model/*.class'`
echo "ggservice-model.jar 打包情况":
jar -cvf ${package}/ggservice-model.jar ${modelclass}
# utils 包进行打包
export utilsclass=`find ./ -path '*/ggframework/utils/common/*.class'`
echo "ggframework-utils_2.10.jar 打包情况":
jar -cvf ${package}/ggframework-utils_2.10.jar ${utilsclass}
# 把项目依赖的jar统一放到一个文件夹中,节省空间
cd ${WORKSPACE%/*}
#mv -f `find . -path "*/lib/*" -name "*.jar"` ../lib/
#echo ${WORKSPACE}
./mvlib.sh ${WORKSPACE##*/}