微服務項目Git倉庫自動化腳本

来源:https://www.cnblogs.com/morang/archive/2022/12/20/16994114.html
-Advertisement-
Play Games

說明 基於微服務項目,產生的的多項目倉庫管理腳本。可直接保存 shell 腳本後酌情修改後試用 目錄結構 xxxx Xxx1Api/ Xxx2Api/ git_clone_api.sh git_branch_dev.sh git_pull_all.sh git_status.sh api-build ...


說明

基於微服務項目,產生的的多項目倉庫管理腳本。可直接保存 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

作者:易墨
Github:yimogit
純靜態工具站點:metools
說明:歡迎拍磚,不足之處還望園友們指出;
迷茫大概是因為想的太多做的太少。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Qt C++界面開發過程中,使用自定義的QGroupBox類,重寫繪圖事件paintEvent時,出現邊框被覆蓋的情況,或邊框消失的問題。 ...
  • 來源:https://juejin.cn/post/7123091045071454238 一個優秀的 Controller 層邏輯 說到 Controller,相信大家都不陌生,它可以很方便地對外提供數據介面。它的定位,我認為是「不可或缺的配角」。 說它不可或缺是因為無論是傳統的三層架構還是現在的 ...
  • 一. anaconda 簡介 Anaconda是一個開源的Python發行版本,用來管理Python相關的包,安裝Anaconda可以很方便的切換不同的環境,使用不同的深度學習框架開發項目。 二. anaconda 下載地址 anaconda 官網地址: https://www.anaconda.c ...
  • 代碼里我們經常會出現大量的條件判斷,在這種情況下,我們可以實現狀態機避免過度使用 有一種方式是把各種狀態歸為各種狀態類 還有一種方式是修改實例的__class__屬性 1 """ 2 狀態機的實現 3 修改實例的__class__屬性 4 """ 5 6 7 class Connection: 8 ...
  • JZ47 禮物的最大價值 描述 描述 在一個m\times nm×n的棋盤的每一格都放有一個禮物,每個禮物都有一定的價值(價值大於 0)。你可以從棋盤的左上角開始拿格子里的禮物,並每次向右或者向下移動一格、直到到達棋盤的右下角。給定一個棋盤及其上面的禮物的價值,請計算你最多能拿到多少價值的禮物? 如 ...
  • 面向對象 1.面向對象簡介 類(Class): 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實例。 方法:類中定義的函數。 類變數:類變數在整個實例化的對象中是公用的。類變數定義在類中且在函數體之外。類變數通常不作為實例變數使用。 數據成員:類變數 ...
  • 一:背景 1.講故事 今天是🐏的第四天,頭終於不巨疼了,寫文章已經沒什麼問題,趕緊爬起來寫。 這個月初有位朋友找到我,說他的程式出現了CPU爆高,讓我幫忙看下怎麼回事,簡單分析了下有兩點比較有意思。 這是一個安全生產的信息管理平臺,第一次聽說,我的格局小了。 這是一個經典的 CPU 爆高問題,過往 ...
  • 一 引入 在設計設備界面時,經常會有一種需求,展示一個閥門,閥門有通斷兩種狀態: 二 CommonValveControl 考慮實現一個自定義控制項,CommonValveControl。 使用自定義控制項比用戶控制項更靈活,更具擴展性,可以使用不同的樣式和模板。 CommonValveControl定義 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...