10 Mar 2021
在windows10下寫自動更新程式腳本

關於自動化更新,之前有研究過在 Mac 筆電下用 deployer 這個 PHP 工具來做佈署更新,也有回滾功能。

不過這個專案比較麻煩,每次更新程式碼,要先登入指定的 VPN,然後手動進入 3 個位置進行 git 的更新,每次更新次數也很多,所以只能自己依需求寫一個自動化腳本。

用這個方式的缺點:要把 git 的帳密寫在指令裡面,但因為登遠端看指令 history 沒有發現記錄,且 windows 10 是自己的,就當作安全了…(別學我XD)

注意:這裡的 git pull 要輸入帳密是因為使用 http 方式更新,在正式機上是合理的,正式機不要使用 ssh key 方式更新。

客戶測試機,因為客戶測試有鎖只能用 80 埠,所以設定另外一個 IP 給 git 主機。

在 Windows 10 中建立一個 git51.txt

cd projects/project1
git pull http://user:[email protected]/ben/project1.git master

客戶正式機

在 Windows 10 中建立一個 git94.txt

cd projects/project1
git pull http://user:[email protected]/ben/project1.git master

客戶備份機上的測試網站 ( 私用 )

在 Windows 10 中建立一個 git96.txt

cd projects/project1
git pull http://user:[email protected]/ben/project1.git master

在 Windows 10 中建立 run.bat 執行檔

putty -ssh [email protected] -pw password -m git94.txt
putty -ssh [email protected] -pw password -m git96.txt
putty -ssh [email protected] -pw password -m git51.txt

當然,還是要先連線客戶的 VPN,然後進資料夾,點 2 下 run.bat 檔案

使用上面的方法,發現遠端主機 pull 下來後,似乎會不同步本地分支,雖然程式碼看起來有更新,但並沒有自動的 merge

可以搜尋關鍵字

master origin/master

改用以下方法!!!

將遠端的 git 帳密記錄在遠端位置,所以操控端的 script 只要下達 git pull 即可

Bash script to automate Git pull

https://stackoverflow.com/questions/47339559/bash-script-to-automate-git-pull/47349643

https://git-scm.com/docs/git-credential-store

到遠端主機的專案下執行以下

git config credential.helper store

然後再一次手動執行 git pull 輸入帳密,下次就不用再輸入帳密

腳本換成以下

客戶測試機

在 Windows 10 中建立 git51.txt 和 git94.txt 和 git96.txt

cd projects/project1
git pull

在 Windows 10 中建立 run.bat 執行檔 ( 要先裝 putty 連線軟體 )

putty -ssh [email protected] -pw password -m git94.txt
putty -ssh [email protected] -pw password -m git96.txt
putty -ssh [email protected] -pw password -m git51.txt

最後一樣連線客戶 VPN 再進資料夾執行 run.bat 即可…

接續上面的動作

補上最後驗證是否有更新成功的動作

指令稿分 2 段,前 3 行是更新,後 3 行是把遠端主機檔案拷貝回來

前 3 個指令稿都類似,主要就是做 git pull 的動作,最後加上一行 git log 取出最後的 git 記錄並輸出到一個檔案

⚠️ 要先手動建立 git-log 資料夾

執行後,會在本機 windows 中建立 3 個檔案

目前仍需要手動核對 3 個 log 檔案,確保程式碼是最新版本

主要的 bat

putty -ssh [email protected] -pw password -m script/git94.txt
putty -ssh [email protected] -pw password -m script/git96.txt
putty -ssh [email protected] -pw password -m script/git51.txt
pscp -pw password [email protected]:git.txt git-log/git-94.txt
pscp -pw password [email protected]:git.txt git-log/git-96.txt
pscp -pw password [email protected]:git.txt git-log/git-51.txt

遠端指令稿

cd projects/project1
git pull
git log -p -1 > ~/git.txt

最後一段 XDD

在 Windows 10 執行結果

手動連線客戶 VPN

執行更新程式 bat,由程式呼叫 Windows 裡的 Python 執行比對程式,進行 3 台主機的 Commit ID 檢查

根目錄下有 2 個 bat 執行檔

run.bat 是專案更新程式

putty -ssh [email protected] -pw password -m script/git94.txt
putty -ssh [email protected] -pw password -m script/git96.txt
putty -ssh [email protected] -pw password -m script/git51.txt

pscp -pw password [email protected]:git.txt git-log/git-94.txt
pscp -pw password [email protected]:git.txt git-log/git-96.txt
pscp -pw password [email protected]:git.txt git-log/git-51.txt

"C:\\Python38\\python.exe" "C:\\Users\\ben\\Desktop\\Script\\python\\run.py"

pause

目錄裡的 script 腳本是登入遠端要執行的腳本,基本上大同小異

Tags: #Windows

回上一頁