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

时间:2022-12-20 20:12:25

说明

基于微服务项目,产生的的多项目仓库管理脚本。可直接保存 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