Git WebHook
一个使用 Python Flask + SQLAchemy + Celery + Redis + React 开发的用于迅速搭建并使用 WebHook 进行自动化部署和运维系统,支持:Github / GitLab / GitOsc。
技术栈简单,部署容易;
代码简洁易懂,二次开发毫无压力;
支持 Github / GitLab / GitOsc;
使用 SSH 方式,支持多服务配置;
Online DEMO Website: http://webhook.hust.cc/,使用 gunicorn + gevent + ngxin 部署。另外,如果觉得配置过于复杂,可以使用精简版 webhookit(https://github.com/hustcc/webhookit),配置简单吗,但是没有 Web 界面的操作。
一、如何使用 ?
1. 安装工具
pip install git-webhook
2. 配置工具
gitwebhook config
命令执行之后,会在对应用户目录生成新的配置文件,然后对应修改配置文件内容。主要需要配置三点:
3. 初始化数据库结构
gitwebhook createdb
4. 运行应用
# 1. run python webserver gitwebhook runserver # 2. run celery async task gitwebhook celery
运行之后,打开 http://127.0.0.1:18340 即可访问。使用 GitHub 账号登陆。
5. 添加WebHook
在工具中添加 Git 项目,获得 WebHook URL,并填写到 Github / GitLab / OscGit 的 WebHook 配置中。
二、效果预览
首页
WebHook列表
服务器列表
WebHook 历史记录
三、部署
代码使用 Flask 框架开发,gitwebhook runserver 运行可以用于线上生产环境,可以额外使用 nginx 做负载均衡和域名绑定。
主要的服务器依赖环境:
备注:如果使用 gunicorn 部署, worker 数量必须为 1,建议 worker 类型为 eventlet (gunicorn -k eventlet -w 1),并且 nginx 负载均衡的时候,需要使用 ip_hash 算法。 具体请参考: gunicorn-web-server
当然也可以直接使用 Docker 部署。
LICENSE
MIT @hustcc
WebHooks https://gitee.com/ 0. git.php hook php代码 <?php //echo(shell_exec("whoami")); if(function_exists("exec")){ $dir = "/home/www/test2"; $giturl = "https://gitee.com/xxxx/test2.git";
原理与流程 git用户执行git push操作 远程仓库发现有用户执行了push操作,就会执行一个脚本post-receive(钩子) 在post-receive脚本中,将git仓库的代码拷贝到web站点目录下 创建git仓库 我们可以在自己的服务器上创建git仓库,有两种方式: git --bare init (裸仓库) git init 两者区别: 普通git仓库的目录结构就和你的代码目录结构
前置知识 git进行版本管理仓库时,在每个项目根目录下都有一个**.git/hooks**,包括commit各个阶段hooks的脚本,这些hooks在git操作commit、push、merge等的时候,可以做一些前置或后置的工作 工具 Husky && lint-staged Husky作用:解决.git配置不能提交远程仓库的问题 lint-staged作用:对git暂存区代码文件进行bash命
首先创建密钥对,用于连接oschina ssh-keygen 选择存放位置,输入密码 密钥对生成完成 将web目录改为apache用户所有。 sudo -u apache ssh-keygen -t rsa -C "email@email.com" 我这使用apache用户执行php脚本,执行上面命令创建一个密钥 会在/var/www/.ssh中看到相应的密钥对 然后在oschina的对应项目里,
1.什么是webhook? webhooks是一个api概念,是微服务api的使用范式之一,也被成为反向api,即:前端不主动发送请求,完全由后端推送。 举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhooks 的典型场景。 简单来说,WebHook就是一个接收HTTP POST(或GET,PUT,DELETE)的URL。一个实现了WebH
注意:husky 的版本大于6.x版本,需要采用新的方式。不兼容之前的写法。 安装 npm install -D husky 在packgae.json中添加prepare脚本 prepare脚本会在npm install(不带参数)之后自动执行。也就是说当我们执行npm install安装完项目依赖后会执行 husky install命令,该命令会创建.husky/目录并指定该目录为git h
1.webhook简述 webhooks是一个api概念,是微服务api的使用范式之一,也被成为反向api,即:前端不主动发送请求,完全由后端推送。 举个常用例子,比如你的好友发了一条朋友圈,后端将这条消息推送给所有其他好友的客户端,就是 Webhooks 的典型场景。 简单来说,WebHook就是一个接收HTTP POST(或GET,PUT,DELETE)的URL。一个实现了WebHoo
(git)Bitbucket使用WebHook实现自动部署PHP代码 第一篇文章……以后应该还有……之前总是看别人的博客,自己本地也写,看见比较好的就私藏下来, 今天开始动手写一些自己的blog…… 一. 工作场景 团队使用bitbucket控制,PHP框架为TP,现在需要利用webhook实现php代码的自动部署。 二. 实现原理 简单的讲,就是在Bitbucket远端设置仓库被push的触发
服务器使用ssh公钥拉取代码 ssh-keygen -t rsa -C "xxx@xx.com" cat .ssh/id_rsa.pub 出现的公钥复制到对应位置 使用webook出现报错:Host key verification failed. 使用www用户操作一次 git pull 流程即可 1:为www用户设置文件的操作执行权限 2:切换用户 su www 如失败: vi /etc/p
1.npm install husky 2.pakage.json配置 { "husky": { "hooks": { "pre-commit": "npm run test", // 在commit之前先执行npm run test命令 "commit-msg": "commitlint -e $HUSKY_GIT_PARAMS" // 校验commit时添加
主要内容:自动化部署的实现方式,maven-release-plugin 插件的使用Maven 项目的部署通常包括以下步骤: 将项目代码提交到 SVN 或 Git 等版本控制系统中,并进行标记。 从 SVN 或 Git 上下载完整的项目代码。 构建应用。 将构建输出的 WAR 或 JAR 文件存放在指定的公共网络位置中。 从指定网络中获取文件,并部署到生产环境上。 更新项目文档以及版本号。 以上这些工作通常由多个不同的团队协作完成,例如,项目研发人员负责项目代码的提交,项目管理员
在项目开发中,通常部署过程包括以下步骤 - 将正在进行的所有项目的代码签入SVN(版本控制系统)或源代码存储库并对其进行标记。 从SVN下载完整的源代码。 构建应用程序。 将构建输出WAR或EAR文件存储到公共网络位置。 从网络获取文件并将文件部署到生产站点。 更新了包含应用程序的日期和更新版本号的文档。 问题声明 (Problem Statement) 上述部署过程通常涉及多个人。 一个团队可以
本文向大家介绍Node 自动化部署的方法,包括了Node 自动化部署的方法的使用技巧和注意事项,需要的朋友参考一下 当我们在更新迭代 Node 项目的时候,我们需要做以下几步: git push 将代码提交至代码仓库 在服务器中执行 git pull 拉取最新代码 pm2 start 运行你的代码 这样做固然没错,但是一旦项目更新迭代过快,就需要不断的重复着上面的步骤,在各种 bash 面板中来回
利用自动化加速软件在不同环境间的迁移 自动化构建不仅仅适用于开发团队 —— 在将软件从开发迁移到生产这一过程中也大有作为。在这一期 让开发自动化中,自动化专家 Paul Duvall 将介绍如何结合使用 Ant 和 Java™Secure Channel 将软件远程部署到多个目标环境中。 关于本系列 作为开发人员,我们的工作就是为终端用户实现过程自动化;然而,很多开发人员却忽略了将自己的开发过程自
用于实现简便部署的模式 Java™ 部署常常很混乱,容易出现错误,需要许多手工操作,这会延误向用户交付软件的时间。本文是分两部分的 让开发自动化 系列文章的第 1 部分。在本文中,自动化专家 Paul Duvall 将介绍用于开发可靠、可重复且一致的部署流程的一些关键模式,帮助读者为 Java 应用程序生成简便的部署。 软件部署常常被视为不可避免的麻烦,可以在遇到它时应付一下,以后就不用理会了。但
更多一键式部署模式 Java™部署常常很混乱,容易出现错误,需要许多手工操作,这会延误向用户交付软件的时间。本文是分两部分的让开发自动化系列文章的第 2 部分。在本文中,自动化专家 Paul Duvall 进一步补充用于开发可靠、可重复且一致的部署流程的一些关键模式,帮助读者为 Java 应用程序生成简便的部署。 关于本系列 作为开发人员,我们致力于为用户自动化流程;但许多开发人员疏忽了自动化我们
本文向大家介绍浅谈python之自动化运维(Paramiko),包括了浅谈python之自动化运维(Paramiko)的使用技巧和注意事项,需要的朋友参考一下 简介 使用开源的Paramiko,我们就可以用Python代码中通过SSH协议对远程服务器执行操作,不需要手敲ssh命令,从而实现自动化运维。 ssh是一个协议,OpenSSH是其中一个开源实现,paramiko库,实现了SSHv2协议(底
自从 Tornado 提供了自己的 HTTP 服务器以后, 运行和部署与其它的 Python web 框架有些不一样. 你需要为你的应用程序编写一个 main() 函数来启动 服务器, 而不是配置一个 WSGI 容器: def main(): app = make_app() app.listen(8888) IOLoop.current().start() if __n