我只是想部署个博客 0

我只想部署个博客 01

序言

我们把代码推送到GitHub的时候,我们可能同样希望把代码推送到服务器上,进行一些自定义的奇妙操作并运行这些代码。不过毕竟跑到服务器上再ssh再pull显得有些诡异,这里讲讲我怎么用Webhook来自动化这些操作。

Webhook

在你的项目里会有个神奇的settings. 这个目录下有一栏Webhooks。详细介绍可以看看官方介绍, 你对 Github 本仓库进行指定操作的时候,他可以进行一些简单的操作,比如向你的服务器发送post指令。

我们可以在服务器上架设对应的脚本,处理对应的post逻辑,这里我只用到了一些简单的逻辑。

在创建webhook之后,Github会向你指定的URL发送对应的指令,根据这个格式,我们可以编写对应的处理逻辑。

服务器上

显然处理webhooks已经有对应的轮子了,不过我这里姑且写一点。

配置一个服务器端的脚本,这里用的是aiohttp编写的

import asyncio
import async_timeout
import os
import json
from aiohttp import web
PORT = 8080
TEST_URL = 'test'
BLOG_URL = os.environ.get('blog_uri')
HOST = '127.0.0.1'
URI = os.environ.get('webhook_url')
async def handle(request: web.Request):
response = await request.read()
post_var = json.loads(response)
try:
if post_var['repository']['secret'] is not None:
os.system(
'cd {blog_url} && git pull origin master'.format(
blog_url=BLOG_URL
)
)
except Exception e:
print(e)
return web.Response(text='Hello world')
def main():
app = web.Application()
app.router.add_post(URI, handle)
app.router.add_get(URI, handle)
web.run_app(app, port=PORT, host=HOST)
if __name__ == '__main__':
main()

当然这玩意只是帮着在对应指令中作拉取功能…

可以在客户端上用requests简单的测试一下。

posted = requests.post(URL, data=WEBHOOK_DATA)
print(posted.content)

持续运行

nohup python -u *.py &

https://www.cnblogs.com/baby123/p/6477429.html

让你的程序在后台运行

这样就可以啦~

要说的话

这里只是为了讲述原理所做的一个基本的框架…其实,我们可以用脚本来处理更复杂的逻辑 …

好吧…我暂时就只配置了这点…垃圾的哭泣…

剩下的以后用到了咱接着写啊…