微服务项目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=vdate +%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=vdate +%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

文章来源于互联网:微服务项目Git仓库自动化脚本

THE END
分享
二维码