微服务项目Git仓库自动化脚本

说明

基于微服务项目,产生的的多项目仓库管理脚本。可直接保存 shell 脚本后酌情修改后试用

目录结构

  • xxxx
    • Xxx1Api/
    • Xxx2Api/
    • git_clone_api.sh
    • git_branch_dev.sh
    • git_pull_all.sh
    • git_status.sh
    • api-build-tag.sh
    • api-commit-push.sh
    • api-dev-release-merage.sh
    • api-update-nuget-pack.sh

脚本放置在外层目录,将操作 Api 后缀目录下 git 仓库

批量克隆仓库

#!/bin/bash # 不要放在中文路径下 # 接口 git clone http://xxxxx.com/XXX.XXXApi.git read pause 

切换分支到 dev

#!/bin/bash function getdir(){     for element in `ls $1 | grep /$`     do         dir_or_file=$1"\"$element 		echo $dir_or_file 		cd $dir_or_file 		git checkout $2 		git pull 		cd ..     done } root_dir="./" branch=dev getdir $root_dir $branch 

拉取分支最新代码

#!/bin/bash function getdir(){     for element in `ls -F $1 | grep /$`     do         dir_or_file=$1"\"$element 		echo $dir_or_file         if [ $element = "docs" ]         then             echo $dir_or_file skip         else            cd $dir_or_file 		   git pull 		   cd ..         fi     done } root_dir="./" getdir $root_dir 

查看仓库状态

#!/bin/bash function getdir(){     for element in `ls $1 | grep /$`     do         dir_or_file=$1"\"$element 		echo $dir_or_file 		cd $dir_or_file 		git status 		cd ..     done } root_dir="./" getdir $root_dir read pause 

自动升级 dev 的 nuget 包

  • 项目: 匹配的文本
  • *Api:Api 后缀的目录
  • XXX: 需要更新的指定包,匹配包名
  • xxxxx.com:nuget 源
#!/bin/bash #set -x echo '自动升级nuget包-Need Setting shell to GBK Encoding' function upgradePack(){ 	tempFile=./temp.txt 	tempPackFile=./tempPack.txt 	echo 当前目录:$1 	cd $1 	cd src 	pwd 	#read pause 	dotnet restore 	dotnet list package --source xxxxxxx.com   --include-prerelease  --outdated>$tempFile 	tempProjectMatch="项目" 	projectName='' 	cat $tempFile | while read line 	do 		#if  [[ "$line" == *XXX* ]];then 			if  [[ $line =~ $tempProjectMatch ]];then 				echo $line | grep -Eo "XXX.((w)+(.?))+">$tempPackFile 				projectName=$(cat $tempPackFile) 				echo 检测项目:$projectName 			else 				if [[ "$line" == *XXX* ]];then 					echo $line | grep -Eo "XXX.((w)+(.?))+">$tempPackFile 					packageName=$(cat $tempPackFile) 					echo 升级包:$packageName 					dotnet add $projectName/$projectName.csproj package $packageName 				fi 			fi  		#fi 	done 	rm $tempFile 	rm $tempPackFile } function getdir(){ 	branchName=$2     for element in `ls $1 | grep /*Api`     do         dir_or_file=$1/$element 		cd $dir_or_file 		if([ "$branchName" != "" ]);then 			git checkout $branchName 			git pull 		fi 		upgradePack $dir_or_file     done }  branch=dev root_dir=$(cd `dirname $0`;pwd) #echo 脚本目录:$root_dir getdir $root_dir $branch read pause 

将 dev 分支打 tag:vyyyyMMdd 并推送到 origin

#!/bin/bash #set -x echo '重命名分支-Need Setting shell to GBK Encoding' function pushTag(){ 	echo 拉取dev分支 	git checkout dev 	echo 创建tag 	time_span=v`date +%Y%m%d` 	git tag -l $time_span 	git tag -a -f -m relrease $time_span 	echo 推送tag 	git push --set-upstream origin $time_span -f 	echo 推送完毕 } function getdir(){     # 文件夹名匹配     for element in `ls $1 | grep -E 'XXXApi|YYYYApi'`     do         dir_or_file=$1/$element 		cd $dir_or_file 		pushTag $dir_or_file     done }  root_dir=$(cd `dirname $0`;pwd) #echo 脚本目录:$root_dir getdir $root_dir read pause 

提交 dev 分支并推送

#!/bin/bash #set -x echo '自动提交-Need Setting shell to GBK Encoding' function pushCode(){ 	echo 当前目录:$1 	git add * 	git commit -m 更新包 	git pull 	git push } function getdir(){ 	branchName=$2     for element in `ls $1 | grep /*Api`     do         dir_or_file=$1/$element 		cd $dir_or_file 		pushCode $dir_or_file     done }  branch=dev root_dir=$(cd `dirname $0`;pwd) #echo 脚本目录:$root_dir getdir $root_dir $branch read pause 

合并 dev 分支到 release

#!/bin/bash #set -x echo '重命名分支-Need Setting shell to GBK Encoding' function pushTag(){ 	echo 当前目录:$1 $branch 	echo 拉取dev分支 	git checkout dev 	echo 创建tag 	time_span=v`date +%Y%m%d` 	git tag -l $time_span 	git tag -a -f -m relrease $time_span 	echo 推送tag 	git push --set-upstream origin $time_span -f 	echo 推送完毕 } function pushCode(){ 	echo 当前目录:$1 $branch 	echo 切换到dev,开始合并 	git checkout dev 	git pull 	echo 删除release分支 	git branch -d release 	echo 新建release分支 	git checkout -b release 	echo 推送新的release分支 	git push --set-upstream origin release -f } function getdir(){     for element in `ls $1 | grep /*Api`     do         dir_or_file=$1/$element 		cd $dir_or_file 		pushTag $dir_or_file 		pushCode $dir_or_file 		echo 睡眠30秒 		sleep 30s     done }  root_dir=$(cd `dirname $0`;pwd) #echo 脚本目录:$root_dir getdir $root_dir read pause  

发表评论

相关文章