编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

shell 定时拉取git仓库代码生成文档

wxchong 2024-07-08 23:52:07 开源技术 16 ℃ 0 评论

需求

最近,有个项目需求:

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 "$?")

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表