背景
最近在优化持续集成平台,原来耗时1个半小时,现在优化到只需要15分钟即可。而从git上拉取代码的时间从15分钟降低到了12秒。
原来的方式
原来的打包,为了避免Gradle在Build过程中的缓存影响打包
- 清除掉所有的代码以及缓存
- 重新
git clone
所有仓库 - 将部分子模块重新
mv
到对应的目录下 - 开始Gradle打包
现在的方式
提供了Git仓库的缓存,只有第一次更新,后续增量更新代码,再cp
到构建目录下进行打包
- Workspace中专为仓库建立了目录
- 第一次
git clone
代码,后续都会进行git pull
增量更新代码 - 在打包的过程中会将仓库中的代码
cp
到构建的目录下 - 将部分子模块重新
mv
到对应的目录下 - 开始Gradle打包
在Shell中定义函数
在Shell中定义函数,与其他语言差不多,只是参数不用指定,使用$1
则代表获取第一个参数,同理$2
,$3
...则代表对应的参数,而在调用时,使用空格即可传递参数。
cloneOrUpdateRespority(){
# 定义第一个参数为仓库名
respority=$1
echo $respority
}
##调用函数
cloneOrUpdateRespority test
判断文件夹是否存在
通过-d "test"
来判断文件夹是否存在
if [ -d 'test' ] && [ -d "${test}/.git" ];then
echo "Git仓库存在"
else
echo "Git仓库不存在"
fi
if-else的使用
通过使用if-then-elseif-else-fi
来完成if
语句的判断
-
if
后的&&
以及||
的逻辑判断则需要使用多个[]
来判断 - 需要注意的是,if后需要加个空格,所有的
[]
的前后都需要加空格来分割语句判断,否则会报警告line 9: [: missing "]"
- 在使用
if-fi
的时候,必须要配对,也就是5个if
就需要有5个fi
,否则就会报[Syntax Error: Unexpected End of File]
if [ -d 'test' ] && [ -d "${test}/.git" ];then
# 存在test以及test中的.git,则认为test库曾经被拉到本地
cd ${respority}
git reset --hard HEAD
git pull
cd ..
else
#如果不存在,则需要clone
git clone -b ${Branch_Name} giturl/${respority} --depth 1
fi