本人開了一個django的我的博客,並且使用docker部署的,每次有代碼更改都須要git本地提交,而後登錄服務器拉取代碼,比較耗時耗力,有沒有一種方式能夠本地提交代碼以後,服務器自動拉取?這就是本文要介紹的自動部署php
看了網上關於自動部署的文章不是特別多,並且部署的都有點複雜,尤爲是針對docker容器的這種基本沒有
還有大部分都是介紹如何自動部署一個網站,可是網站外的代碼無法拉取,由於網站內執行git命令,沒法cd到網站根目錄外去操做,通過大量嘗試,本身研究出一種很是直接簡單的自動部署方案python
由於個人是docker應用管理方式,網站內目錄拉取不了外層級的目錄,因此須要獨立開webhook服務,這種獨立webhook服務比較通用,基本全部webhook需求均可以知足
首先我用python開的服務,固然php、go等均可以,語言不限,我這裏以python爲例
服務代碼:git
from http.server import HTTPServer, BaseHTTPRequestHandler import json import subprocess import os class Resquest(BaseHTTPRequestHandler): def handler(self): print("data:", self.rfile.readline().decode()) self.wfile.write(self.rfile.readline()) def do_POST(self): print("hello webhook..") os.system('cd /root/docker-django && git add . && git status && git stash ;git stash clear;git pull') print("git pull finished") if __name__ == '__main__': host = ('', 9002) server = HTTPServer(host, Resquest) print("Starting server, listen at: %s:%s" % host) server.serve_forever()
這段服務代碼是網上找的,裏面有get和post,這段是我精簡以後的,不必get,也不必解析參數,直接開啓服務執行shell命令就完事了web
在服務器上執行 python3 webhook.py 服務就起來了,後面加上& 而後回車,就能夠在後臺運行了 python3 webhook.py &
docker
服務器如何域名映射之類的不屬於這裏討論範圍,默認這些基礎你們都已OK
1,可能在測試過程當中發現端口9002被佔用,解決方式是先執行lsof -i:9002
站到端口占用的pid,而後kill -9 pid
殺掉便可使用
2,測試是否可以訪問成功,在命令行裏執行:curl -X POST http://你的域名:9002
3,發現外網沒法訪問:http://你的域名:9002 ,登錄阿里雲或騰訊雲或其餘服務器後臺,看下服務器的9002端口是否是沒開,沒開的話自定義開啓一下9002便可shell
iOS架構師,幾乎用過各類編程語言,以iOS爲主。若是您以爲文章幫助了你,請給個關注,本人有一個iOS開發高手必備神器:資源庫 ,能夠在appstore搜索下載,若是您以爲好,就給資源庫來個好評吧?django