2021年10月20日 星期三

利用 Azure DevOps 備份 Gitea 資料

原本打算使用 Azure DevOps 的 GIT 功能,公司的同事們可以方便分享 GIT 控管,
但是使用者一多,就要另外收費,對於小公司來說也是一筆負擔,
於是想到利用 NAS  架設 GIT,再將資料同步到 DevOps 當成備援,
萬一 NAS 掛了,還可以由 DevOps 上還原回來,
公司也不用額外購買相關硬體備份,
所以我利用 QNap NAS 的 Docker 功能 Contaniner Station ,建立 Gitea 的容器,
再利用 Gitea 的 WebAPI 功能開發一個工具,幫忙建立多個全新的 GIT 資料倉,
幸好有前人寫了 .NET 版的 Gitea.API for .NET DLL 可以直接拿來用
二話不說先抓下來開發小工具,


有興趣的可以自行下載 程式碼
開發環境為 C# VS2019 .NET 4.5 , 參考元件 Gitea.API.DLL V 1.0.1.0


根據先前寫的 Shell , 請參考 : [轉移原有 Git 資料到 Azure DevOps 上]
我甚至將這個功能拆成2個 shell,
一個是抓GIT資料倉下來的功能,一個是推送遠端功能,
目的只是保持資料夾同步,並利用排程自動執行
這樣就可以利用自已建立的 Gitea Server,
不受微軟超過5人要收費的限制,還可以利用 Azure DevOps 當成雲端備援,且不限空間,
若使用亞馬遜的 AWS CodeCommit ,還有流量限制和 Git 指令次數限制,


第一個 Shell 只為了把遠端的資料倉抓到本地端
filename='GitDIR.txt'
#因為是由網路芳鄰抓取,若是HTTPS請換成對應的 URL
sourcePath='W:'

exec < $filename
while read line
do
	#--- 只將 .GIT 資料倉抓取下來
	#檢查資料夾是否存在,若存在就刪除重抓
	if [ -d "$line" ] ; then
		echo "$line 存在"
		rm -rf $line
		echo "刪除資料夾 ./$line/"
	fi
	#從將原始資料倉從 Server 上抓下來,使用 bare 參數表示只抓 .git 隱藏檔內的資料
	echo "抓取 W:/$line/"
	#git clone --bare W:/$line/
	git clone --bare $sourcePath/$line/
done



第二個 Shell 是將本地端的資料倉覆蓋掉遠端的資料倉
filename='GitDIR.txt'
url='https://要上傳的帳號名稱@dev.azure.com/要上傳的帳號名稱/'

## 讀取檔案
exec < $filename
while read line
do
	#--- 將 GIT 轉移到另一個 Git Server
	#檢查資料夾是否存在,若存在就刪除重抓
	if [ -d "$line" ] ; then
		cd ${line}
		#將目前的資料倉同步到 Azure DevOps 的 GIT Server
		git push --mirror $url$line/_git/$line
		cd ..
		pwd=$(dirname $(readlink -f "$0"))
		echo "完成 Push ,切換路徑 : $pwd"
	else
		echo "找不到資料倉 $line "
	fi
	
done


至於如何應用? 就看實際狀況而定了。

沒有留言:

張貼留言

熱門文章