程序员的资源宝库

网站首页 > gitee 正文

码云gitee.com(Django)通过WebHooks实现自动同步代码部署

sanyeah 2024-03-29 15:00:10 gitee 6 ℃ 0 评论

 

因为我的服务器上装的是(python3+django+uwsgi+nginx),所以为了实现WebHooks自动同步代码部署需要django的相关设置,度娘竟然找不到相关博客,

只能找到php的,果然是世界上最好的语言,没办法我只能按照php的例子实现django的WebHooks自动同步代码部署。(mac)(需要有django基础)

1. 在你django项目里新建一个app,如果你没有安装pycharm就百度命令行新建,下面是pycharm新建的步骤:

 

 

2. 在你的项目settings.py里面找到:

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'testapp'
]
在后面加上'testapp',你的app名字,接下来为WebHooks的实现提供一个url接口,直接在django项目里添加:
在urls.py写上:
from django.conf.urls import url
from django.contrib import admin
from testapp import views

urlpatterns = [
url('admin/', admin.site.urls),
url(r'pushgit/',views.pushgit),#这里是新增的url接口,实现在testapp的views.py里的pushgit函数
]
现在贴上pushgit函数代码:
from django.shortcuts import render,render_to_response

from django.http import JsonResponse

import time

from django.core.handlers.wsgi import WSGIRequest

import json

import os
def pushgit(request):
# print(type(request))

projectPath = '/python36_pro/pyDemo0/pyDemo'

now = time.strftime("%Y-%m-%d %H:%M:%S")

if(request.method == "POST"):
os.system('cd /python36_pro/pyDemo0/pyDemo && git pull origin master')#这句代码是核心,实现在服务器拉取代码的功能,其它的代码基本都是为了测试url能否拿到码云钩子返回的数据
#这里没有做根据钩子返回数据判断做对应的处理,因为我一个人开发,不用考虑权限,分支问题(详情参考:http://blog.csdn.net/LMH820822/article/details/78356399?locationNum=10&fps=1),
#主要根据你的实际情况和返回数据情况去处理

#经过测试,钩子返回关于push提交代码相关的数据都在request.body里面,需要json解析

with open('files.txt', 'w') as f:
f.write(json.dumps(json.loads(request.body)))#request.POST.get('user',{'data':'无'})
ret = {'status': 0, 'data': json.loads(request.body), 'message': 'it is ok'}


else:
with open('files.txt', 'r') as f:
data = json.loads(f.read())
ret = {'status': 0, 'data': data, 'message': 'it is ok'}

print(request.method)


return JsonResponse(ret)
3. 在码云后台的对应项目管理里加上你自定义的url接口:

测试一下,如果有返回你接口返回的数据说明通了。

4. 问题没有那么简单,首先接口一开始是不通的,于是上面除了核心代码外,其它的都是测试接口通不通。解决方法:

第一,你要了解django的post的请求做了中间件拦截,名为csrf认证,为了达到我们的效果暂时注释屏蔽:(这种做法不是合理的,csrf是需要的,百度其它方法解决)

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
#'django.middleware.csrf.CsrfViewMiddleware',#注释这行
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
5.到服务器找到uwsgi的配置文件: vim uwsgi.ini(看你的ini文件) ,在里面的[uwsgi]下面加上一句:

py-autoreload = 1 (注意,这句代码的作用是当你提交代码时自动重启uwsgi,否则python代码不会生效)


6. 验证:
随便写个h5页面接口,放个元素例如:
<h1 style="color: yellowgreen;">HELLO WORD !</h1>
每次修改字体颜色后用SourceTree提交代码push完后,打开浏览器输入你的页面url看看颜色是不是成功修改了,修改了说明部署成功,以后就不用登录服务器拉代码了。
7.注意点:
>https://www.cnblogs.com/zhonghuasong/p/5975952.html(配置github或者gitee拉取或提交代码免登录用户名密码,在生成sshkey的时候不要设置密码)

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表