本人开了一个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