姐姐今年高年級,弟弟今年中年級,
兩人心中總是充滿著美麗的幻想,每年都會期待聖誕老公公的到來,
早在聖誕節前,我就有意無意的提醒他們,
沒有聖誕老公公,只有愛我們的主耶穌,刻意不一次戳破他們心中的彩色泡泡,
平安夜當晚,孩子的媽將我提前準備的聖誕禮物拍照給他們看,還再次強調是爸爸準備的,
但姐姐卻一直問說聖誕老人今天會來我們家嗎?弟弟倒是很平靜...
我也再一次解說,我就是聖誕老爸爸,沒有聖誕老公公,
睡前,姐姐開心的在房間門把,掛了自己做的聖誕襪,
弟弟則是乖乖上床睡覺,完全沒準備聖誕襪,
第二天早上,弟弟特地早起去檢查姐姐的聖誕襪,
想當然,襪子內空空如也,
於是弟弟拿了一包自己喜歡的餅干放進去,就默默的下樓吃早餐。
早上姐姐起床,迫不及待去檢查襪子有沒有禮物,
發現裡面有東西,開心的拿出來,看到是弟弟心愛的餅干,
姐姐拿著餅干,轉頭望著我說:[這是弟弟的餅干,這個傻弟弟以為他看不出來。]
我則對姐姐說,你現在不只有聖誕老爸爸,還多了一個聖誕老弟弟。
姐姐則是開心的收下弟弟送的禮物,
小孩長大了,總要讓他們知道,
沒有聖誕老公公,只有愛我們的主耶穌,
而女孩子似乎心中總是充滿著美麗的幻想,不願意面對現實的殘酷,
如同姐姐手上拿著弟弟送的餅干,心理還是期待著聖誕老人坐著雪橇,挨家挨戶送禮物,
我想,就讓這彩色泡泡持續到每年的聖誕節吧!
2022年12月26日 星期一
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 只為了把遠端的資料倉抓到本地端
第二個 Shell 是將本地端的資料倉覆蓋掉遠端的資料倉
至於如何應用? 就看實際狀況而定了。
但是使用者一多,就要另外收費,對於小公司來說也是一筆負擔,
於是想到利用 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
至於如何應用? 就看實際狀況而定了。
轉移原有 Git 資料到 Azure DevOps 上
原先在公司的 GIT Server 因為老闆擔心,所有程式碼放到雲端,萬一被駭客偷走糟了,
所以一直以來我們的做法是放在公司的電腦主機,以網路芳鄰的方式連進去取資料,
同事們就以 VPN 的方式連回辦公室取資料,
我們也針對這些動作寫了一套 Git Shell 幫忙把資料抓下來,否則開發一個產品需要用到四五十個專案,單單同步也夠嗆了...
問題是使用 VPN 的速度本身就不快,所有相關專案同步下來大約要半小時多,確實有點久,
但我們也忍了幾年這麼使用,
最近老闆突然開竅了,同意把版本控管上雲端,於是我們 Survey 了幾家可行方案,決定用 Microsoft Azure DevOps ,
雖然 Azure DevOps 前5人免費,超過每人每月收6美元,比亞馬遜的 AWS CodeCommit 超過5人每人每月1美元來得貴,
但 Azure DevOps 不限空間和流量,也沒 Git 指令限制,還是比較符合目前所需,
Azure 提供 CLI 方式,可直接對 DevOps 下指令,
參考官網如何安裝 Azure CLI ,使用 PowerShell 安裝並登入成功後,寫個自動建立資料倉的 PowerShell,記得副檔名要改成 .ps1 (Win10後可由檔案總管執行 ps1 其它版本好像不行,我統一都是在 powershell 中切換目錄執行)
$file = Get-Content ".\GitFolder.txt"
foreach ($element in $file)
{
Write-Host "Creat " $element
az devops project create --name $element
}
Write-Output "OK 完成"
Read-Host -Prompt '按下 Enter 結束 !'
這個 Shell 主要功能就是把 GitFolder.txt 裡面所列的 GIT 資料倉名稱全部建立到 DevOps 上,
建立完成後就準備把舊的 GIT 資料倉搬移到 DevOps 上了,
這個做法很簡單,
1. 先將目前所有 GIT 資料倉抓一份到本地端
2. 推送到目的 GIT server
就這樣,2步驟
filename='GitFolder.txt'
url='https://要上傳的帳號名稱@dev.azure.com/要上傳的帳號名稱/'
#因為是由網路芳鄰抓取,若是HTTPS請換成對應的 URL
sourcePath='W:'
## 讀取檔案
exec < $filename
while read line
do
#--- 將 GIT 轉移到另一個 Git Server
#檢查資料夾是否存在,若存在就刪除重抓
if [ -d "$line" ] ; then
echo "$line 存在"
rm -rf $line
echo "刪除資料夾 ./$line/"
fi
#先將原始資料倉從 Server 上抓下來,使用 bare 參數表示只抓 .git 隱藏檔內的資料
echo "抓取 $sourcePath/$line/"
#git clone --bare W:/$line/
git clone --bare $sourcePath/$line/
cd ${line}
#將抓下來的最新資料倉同步到新的 GIT Server
git push --mirror $url$line/_git/$line
cd ..
#刪除剛抓下來的資料倉,若使用 rm -d 刪除資料夾會有錯誤,因為資料夾不是空的
rm -rf $line
echo "刪除資料夾 ./$line/"
done
做完以上步驟,就成功把舊的 GIT 資料倉轉移到 Azure DevOps 上了。
訂閱:
文章 (Atom)
熱門文章
-
今天一位朋友在問我,他的電腦無法開機, 電源一開都沒畫面....怎麼辦? 通常螢幕沒有畫面的問題很多種, 第一考慮的是螢幕有沒有壞掉? 怎麼判斷呢? 1.檢查螢幕 先開螢幕的總電源,看是不是有亮電源燈? 若有表示電源輸入沒問題,再來就按螢幕的功能鍵, 看會不會跳出螢幕設定視窗...
-
前陣子玩了一些水耕的設備, 因為要天天記錄溫度、EC(電導度)、PH(酸鹼度), 顯得有點麻煩,所以打算自己 DIY 一些設備來玩玩。 首先考慮到程式開發的速度,選擇使用 Arduino 的板子來 DIY 我所購買的板子是 Arduino Leonardo, 另外購買 ...
-
魚菜共生的作法有很多種, 我所採用的是介質床加上 Bell Siphon(鐘虹吸) 產生潮汐現象, 網路上查詢的結果是這樣成功率比較高。 但是先前 DIY 的 Bell Siphon 調整了好久,才能有正常的虹吸現象, 原因就是虹吸的進水口水平難以調整, 後來去上了魚...

