之前聽學長介紹過webhooks,也知道有這個東西,但沒有真正的用於項目部署,長久以來一直過着“刀耕火種”的生活......長久以來,都是這么更新代碼的:
由於之前做的項目剛剛上線,需要對其進行持續的維護,而項目所在的服務器只能通過內網登錄,出了校門就不行了,就想起了webhook,決定要搞一下方便后期部署。
剛開始找到了Bitbucket的官方文檔中的webhooks部分,頭都要大了,但是勉強能看懂些。
后來參照其它人的部署代碼,琢磨出了自己的一套部署。
大致流程是這樣的:webhooks可以通過監聽push觸發回調,發送post請求到所指定的地址,服務端收到該請求進行對應的git pull更新代碼的操作。
新建webhook:找到項目的weebhooks。Add new webhook創建一個webhook。Title用以區分不同的webhook, URL是你所指定的POST請求的接口地址(如果還沒有定義好,可以臨時填一個網址如http://baidu.com也可以,后期接口完成后再改),其它默認。點擊save時,webhook會發送一個測試請求,用於測試url的有效性。測試通過后就成功的創建了一個webhook。
構建對POST請求處理接口:以nodejs為例。在服務器上創建webhook的POST請求對應的處理接口。收到請求后就代表開發者向github或bitbucket中push了新的代碼,我們只需要進入項目根目錄,執行git pull origin master(按實際情況填寫,不一定是origin master)拉取代碼更新就ok了。
首先,在express中建立一個路由地址,通過引入一個插件shelljs執行進入目錄,執行更新的shell操作就可以了。對於同步操作,它會返回一個對象,通過判斷對象的code是否等於0來判斷執行狀態。當然了,express是我偷懶的寫法,也可以直接用node的http模塊來處理post請求。
部署:部署的時候,需要讓該服務常駐后台,在這里,推薦forever或者pm2進行部署,易上手。
測試:代碼部署完畢后,將webhook的url和服務器的url進行比對看是否一致,如果一致了,就可以通過push更新代碼,之后在gitlab/github/bitbucket的webhooks查看對應請求的狀態。
(url為測試地址,請填寫自己服務器接口的真實地址)
點擊View requests查看對應的請求狀態。如果返回200OK,代表代碼已經成功更新。
總結:有了webhook,以后我們部署更新代碼的時候,就只用git push就好了,不用再登錄服務器進行一步步的更新,真是方便多了,也適用於項目部署自動化的一部分吧。
第一次寫博文,大家有什么意見盡管發表,別噴的太厲害就行。歡迎大神指導。