热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

webhook自定义服务器,使用python做一个webhook服务器

通常,可以使用gitlab给自己搭建一个代码托管平台,或者使用github等流行的代码管理平台维护自己的代码,当需要在服务器上部署项目的时

通常,可以使用gitlab给自己搭建一个代码托管平台,或者使用github等流行的代码管理平台维护自己的代码,当需要在服务器上部署项目的时候,一个简单的做法就是在服务器上使用 git clone

或者

git pull

命令拉取最新的代码并进行部署。可能只有两行的命令,但每次更新都需要手动操作依然很麻烦。

今天介绍一个小工具,可以更高效便捷地完成自动拉取代码并部署的功能。 不是jenkins,而是使用python自己编写一个小的webhook服务。

前提是你的机器具有公网IP地址,或者是可以从代码托管平台访问到的某个机器(内网环境)。

首先,确保机器上已经安装有python并已经安装了pip。

执行 pip install glhooks

glhooks是小巧精悍的一个库,经过简单的配置就可以完成webhook的功能。下面我们来看一下如何配置config.ini文件。 [server]

host=gitlab.example.com

log_file=/home/myname/Downloads/webhookfile.log

; email=myname@example.com

[mailer]

user=my.name@example.com

password=123123

host=smtp.example.com

security=plain

sender=Gitlab Webhook

; list of repositories

[http://gitlab.example.com/myname/AwesomeProject]

path=/home/myname/webhook/Awesomeproject/

branch=master

[http://gitlab.example.com/myname/YetAnotherAP]

path=/home/myname/webhook/YetAnotherAP/

branch=master

上面的配置当中,修改host为自己的代码托管平台网址,并修改自己对应的项目repository网址,本地path为运行该webhook 服务的机器上的路径,可以自行指定。

启动命令是 python -m glhooks /home/myname/webhook/config.ini

指定配置文件为上述的config.ini文件。默认会启用该server的8000端口。

现在已经可以使用这个工具来自动pull代码了。

如果在自动pull代码之后还有别的操作,比如将代码复制到指定路径当中进行编译等操作,可以通过手动修改glhooks的库文件的方式实现。具体方法如下: class GitlabWebhookHandler(BaseHTTPRequestHandler):

RESPONSE_MESSAGE = "Python GitLab webhook handler"

@property

def context(self):

return self.server.context

def do_POST(self):

data_size = int(self.headers["Content-Length"])

data = self.rfile.read(data_size)

json_data = json.loads(data.decode("utf-8"))

try:

self.handle_commits_data(json_data)

except Exception as e:

self.context.logger.exception("Error during parsing of data", json_data)

# self._send_email(json_data, e)

self._send_response_message(self.RESPONSE_MESSAGE, status_code=500)

else:

self._send_response_message(self.RESPONSE_MESSAGE)

os.system(r"""YOUR BASH COMMAND HERE""")

默认的,glhooks的文件会被放在 /usr/local/lib/python2.7/dist-packages/glhooks/

路径当中,按照上文的样子修改server.py文件的Handler函数,在该函数的最后一行加上os.system()调用即可。



推荐阅读
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细记录了在基于Debian的Deepin 20操作系统上安装MySQL 5.7的具体步骤,包括软件包的选择、依赖项的处理及远程访问权限的配置。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文介绍如何使用 Python 提取和替换 .docx 文件中的图片。.docx 文件本质上是压缩文件,通过解压可以访问其中的图片资源。此外,我们还将探讨使用第三方库 docx 的方法来简化这一过程。 ... [详细]
author-avatar
飞飞飞070801
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有