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 只為了把遠端的資料倉抓到本地端
  1. filename='GitDIR.txt'
  2. #因為是由網路芳鄰抓取,若是HTTPS請換成對應的 URL
  3. sourcePath='W:'
  4.  
  5. exec < $filename
  6. while read line
  7. do
  8. #--- 只將 .GIT 資料倉抓取下來
  9. #檢查資料夾是否存在,若存在就刪除重抓
  10. if [ -d "$line" ] ; then
  11. echo "$line 存在"
  12. rm -rf $line
  13. echo "刪除資料夾 ./$line/"
  14. fi
  15. #從將原始資料倉從 Server 上抓下來,使用 bare 參數表示只抓 .git 隱藏檔內的資料
  16. echo "抓取 W:/$line/"
  17. #git clone --bare W:/$line/
  18. git clone --bare $sourcePath/$line/
  19. done



第二個 Shell 是將本地端的資料倉覆蓋掉遠端的資料倉
  1. filename='GitDIR.txt'
  2. url='https://要上傳的帳號名稱@dev.azure.com/要上傳的帳號名稱/'
  3.  
  4. ## 讀取檔案
  5. exec < $filename
  6. while read line
  7. do
  8. #--- 將 GIT 轉移到另一個 Git Server
  9. #檢查資料夾是否存在,若存在就刪除重抓
  10. if [ -d "$line" ] ; then
  11. cd ${line}
  12. #將目前的資料倉同步到 Azure DevOps 的 GIT Server
  13. git push --mirror $url$line/_git/$line
  14. cd ..
  15. pwd=$(dirname $(readlink -f "$0"))
  16. echo "完成 Push ,切換路徑 : $pwd"
  17. else
  18. echo "找不到資料倉 $line "
  19. fi
  20. done


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

沒有留言:

張貼留言

熱門文章