git webhook自動部署服務端代碼django python docker等

背景

本人開了一個django的我的博客,並且使用docker部署的,每次有代碼更改都須要git本地提交,而後登錄服務器拉取代碼,比較耗時耗力,有沒有一種方式能夠本地提交代碼以後,服務器自動拉取?這就是本文要介紹的自動部署php

方案調研

看了網上關於自動部署的文章不是特別多,並且部署的都有點複雜,尤爲是針對docker容器的這種基本沒有
還有大部分都是介紹如何自動部署一個網站,可是網站外的代碼無法拉取,由於網站內執行git命令,沒法cd到網站根目錄外去操做,通過大量嘗試,本身研究出一種很是直接簡單的自動部署方案python

方案主要內容

  • 用python寫一個webhook.py的服務文件,運行 python3 webhook.py
  • 若是已經運行了,端口9002會被佔用,查找pid: lsof -i:9002 ,而後kill就行
  • 外網沒法訪問http://ip:9002/,是端口須要在控制檯添加放開規則

詳解

由於個人是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

相關文章
相關標籤/搜索