使用github的Webhooks進行自動化增量部署

原理:

在向github進行過一次push之後,github將按照我們的配置,向配置中指定的URI發送一個post請求。

我們的伺服器接收到這個post請求之後,由動態語言來調用伺服器上的腳本來git pull代碼。

這樣就是實現了自動化增量部署:

1. 每次git push之後伺服器自動更新代碼

2. 由於git pull所以是增量更新而不是全量更新

3. 由於git倉庫即網站文件夾,git pull成功後再訪問伺服器網站就看到新的網站內容

我們需要做的:

1. 讓網站文件夾成為伺服器的本地git倉庫,即在該文件夾進行一次git clone

(調試方法:在本地修改點源代碼,git push之後,到伺服器上git pull,刷新瀏覽器看看起作用沒)

2. 在網站上添加邏輯,當接收到post請求時,執行git pull的腳本,例如Python代碼:

class HookHandler(tornado.web.RequestHandler):ndef post(self, hook):nif hook == "deploy":n result = subprocess.Popen(["mypackage/web/deploy.sh"], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)n out, err = result.communicate()nself.write(out + "n" + err)n

bash腳本代碼:

cd /var/www/blog/ngit pulln

(調試方法:在本地修改點源代碼,git push之後,向該URI發個post請求,刷新瀏覽器看看起作用沒)

3. 在github項目的Settings -> Webhooks添加webhook,指定URI

(調試方法:在本地修改點源代碼,git push之後,刷新瀏覽器看看起作用沒)

當然,你的伺服器端邏輯可以用任何動態語言來寫(Java,Python,PHP,Node……),邏輯可以更豐富,你的bash腳本邏輯也可以更豐富(覆蓋,編譯,重啟伺服器什麼的)。上面只是演示了「打通開發機和伺服器的聯繫」的脈絡。

推薦閱讀:

從0開始學習 GitHub 系列之「加入 GitHub」
我從github上下載了個開源代碼並用到了我的項目中,但是開源代碼一直在更新,如何能夠很方便的更新到呢?
git圖解:代碼區域總結
讓你的終端更有趣——一句話心情

TAG:GitHub | 持续部署 |