需求
最近,有个项目需求:
1、从git拉取代码并编译
2、执行编译后的代码,用smart-doc生成api文档
3、将生成的api文档,copy到远程api文档服务器
实现思路
1、工作机要能访问git仓库,从git仓库拉取代码,需要做配置免密钥登录,避免每次操作输入密码
2、编译后要获取结果,能知道编译是否成功,如果成功,才能后续生成文档操作,否则要继续编译其他项目
3、编译成功后,生成文档,用scp命令将文档copy到目标服务器。
具体实现
#!/bin/bash
function gendoc() {
destpath='/xxxx/doc'
localpath='/home/xxx'
appName=$1
remoteDocServerAddr='127.0.0.1'
localFolderPath=$localpath'/'$appName
echo "**********scp localFolderPath:="$localFolderPath"**************"
cd $localFolderPath
#编译代码
mvn -Dfile.encoding=UTF-8 smart-doc:html
#获取编译结果
ret=$(echo "$?")
val=0 #成功
if [ $ret -eq $val ]; then
echo "compile ok"
else
#编译失败 返回1
echo "complie error "
return 1
fi
echo "**************copy doc to doc server**************"
remoteDocFolderPath=$destpath'/'$appName
if test -f $localFolderPath/doc/index.html; then
scp $localFolderPath/doc/index.html root@$remoteDocServerAddr:$remoteDocFolderPath
scp $localFolderPath/doc/AllInOne.css root@$remoteDocServerAddr:$remoteDocFolderPath
fi
cd $localpath
return 0
}
#工程名称
projects=(devmgr)
for project in ${projects[@]}; do
url='http://username@ip:port/xxx/'$project
echo "**************start hanlde "$project"**************"
#工程存在
if test -d $project; then
echo 'project exits'
cd $project
#更新代码
/usr/bin/git pull --rebase
else
#工程不存在
echo 'project no exit'
/usr/bin/git clone "$url"
cd $project
fi
#获取当前时间
curdate=$(date +%s)
echo 'curdate:'$curdate
#获取git最后提交时间
gitdate=$(git show --stat --date=raw | grep Date | awk '{print $2}')
echo 'gitdata:'$gitdate
#计算当前时间和git最后提交时间差
diff=$(expr $curdate - $gitdate)
#小于1天 生成文档
if [ $diff -lt 86400 ]; then
gendoc $project
#获取结果
res=$(echo $?)
#处理失败,继续处理其他项目
if [ $res = "1" ]; then
continue
fi
else
#超过1天,不生成文档
echo 'no genrate doc'
fi
cd ../
echo "**************end handle "$project"**************"
done
总结
1、数组遍历用法
projects=(devmgr api)
for project in ${projects[@]}; do
echo $project
done
2、获取git最后提交时间
gitdate=$(git show --stat --date=raw | grep Date | awk '{print $2}')
3、获取执行结果
ret=$(echo "$?")