寫一個自動化部署腳本,能根據git push動作自動更新釋出代碼(更新檔檔案(或更新檔案,以下簡稱更新檔))
通過git webhooks、python腳本、linux shell腳本完成,所有動作均自動完成,人工部分僅限于釋出更新檔檔案之前
git webhooks實作觸發執行腳本
python腳本用于接收git webhooks的post資料并根據這些資料判斷是否執行shell腳本
linux shell腳本用于實作部署、備份、復原等操作
使用者在編寫更新檔後,除了将更新檔檔案push到git外,将更新檔檔案的路徑以及相關操作寫到指定檔案(如名稱為update.conf,以下簡稱配置檔案)中,自動化部署腳本(以下簡稱腳本)會根據配置檔案,在生産伺服器執行相關操作,并将這些檔案賦予正确的權限,如果需要緩存,則清除緩存(關于是否需要根據需要清除緩存,可以從上面提到的指定檔案中擷取),再根據需要重新開機相關服務
關于指定檔案格式的約定。可以按照以下格式:
1
2
3
4
5
6
7
8
9
10
<code>file</code> <code>path</code><code>/to/filename1</code> <code>add</code>
<code>file</code> <code>path</code><code>/to/filename2</code> <code>remove</code>
<code>file</code> <code>path</code><code>/to/filename3</code> <code>update</code>
<code>file</code> <code>path</code><code>/to/filename4</code> <code>add</code>
<code>config cleancache </code><code>enable</code>
<code>config cleancache disable</code>
<code>config restartservice </code><code>enable</code>
<code>config restartservice disable</code>
<code>target serverid </code>
<code>... ... ...</code>
file表示更新檔檔案,path/to/filename1表示檔案路徑,add、remove以及update表示檔案執行的動作
config表示配置,厘清除緩存和重新開機服務,由enable和disable決定是否執行
target表示生産伺服器的ip或主機名,每一個target均能由更新伺服器ssh連接配接
git服務端會根據使用者的git push動作,觸發git服務端的webhooks動作,git伺服器将json資料post到更新伺服器上
更新伺服器上能捕獲到git服務端發送過來的json資料,從中擷取repository的url以及branch等資訊,并且根據json中的資訊,判斷是否需要執行git fetch以擷取這些更新檔檔案,以及是否需要執行部署操作
當執行部署操作時,更新伺服器将生産伺服器上的代碼備份到備份伺服器或生産伺服器上的其他備份位置,根據上文的配置檔案決定是否增删改檔案,是否清除緩存和是否重新開機服務
更新伺服器能ssh到生産伺服器,檔案操作、清除緩存和重新開機服務的指令全部通過ssh完成
檢測相關api,判斷是否更新成功,如果更新成功,則記錄更新日志;如果更新失敗,則復原檔案,再根據需要決定是否清除緩存和是否重新開機服務
tag:git webhooks,自動化部署,shell腳本,python basehttpserver,python接收webhooks
--end--