webhook简介
Webhook,也就是人们常说的钩子,是一个很有用的工具。你可以通过定制 Webhook 来监测你在 Github(Gitlab,Coding等)上的各种事件,最常见的莫过于 push 事件。如果你设置了一个监测 push 事件的 Webhook,那么每当你的这个项目有了任何提交,这个 Webhook 都会被触发,这时 Github 就会发送一个 HTTP POST 请求到你配置好的地址。
如此一来,你就可以通过这种方式去自动完成一些重复性工作;比如,你可以用 Webhook 来自动触发一些持续集成(CI)工具的运作,比如 Travis CI;又或者是通过 Webhook 去部署你的线上服务器。
webhookit简介
在网上查找webhook用法的时候,资料杂而乱,完全不知道哪个可行。于是在GitHub上搜webhook,就发现了这个好东西。
摘取官方简介
一个极简的命令行版本的 git webhok,部署容易,非常简单就可以部署一个 webhook server。支持GitHub, GitLab, GitOsc, Gogs, Coding。Python 2 / 3 都支持。
安装介绍就不在重复讲,参考官方:https://github.com/hustcc/webhookit 。 这儿只讲一些遇到的一些问题和解决方法。
webhookit使用
注意事项
配置文件
# -*- coding: utf-8 -*-
'''
Created on Mar-03-17 15:14:34
@author: hustcc/webhookit
'''
# This means:
# When get a webhook request from `repo_name` on branch `branch_name`,
# will exec SCRIPT on servers config in the array.
WEBHOOKIT_CONFIGURE = {
# repo_name填项目名,branch_name填分支名
'repo_name/branch_name': [{
# 如果执行的脚本在本地,下面参数可以为空。如果执行的脚本在另一台远程服务器,则需要填参数
'HOST': '', # 远程服务器host
'PORT': '', # 远程服务器端口
'USER': '', # 用户名
'PWD': '', # 密码
# 脚本路径,必须为绝对路径
'SCRIPT': '/home/hustcc/exec_hook_shell.sh'
},
...],
# 可以配置多个脚本,格式和上面一样。一个示例:http://webhookit.hust.cc/
}
无法访问URL地址
如果安装了nginx最好用nginx转发ip地址,不然会出现访问不了url。nginx转发配置如下
server {
listen 80;
server_name webhook.*****.com; # *** 为自己的域名
error_log /airm2m_data/airm2m/log/webhook.error; #log保存位置
location / {
proxy_pass http://127.0.0.1:18340; #转发本地IP
}
}
python3使用问题
尽管官方描述支持python3,但是在使用过程还是出现了问题,修改支持python3的代码见下:https://github.com/lenghonglin/webhookit/commit/f6e034bbad6a789df94b0e649137437eb2e86512
脚本执行但未生效
这个问题是纠结最久的问题,网上也有人遇到见过,摘取一下问题
情况如下: 我在ubuntu server 14.04 上面安装了gitlab,来托管项目代码。然后想通过gitlab的web hook
功能来做测试服务器代码自动化更新代码功能。现在遇到一个问题:就是我客户端在master分支上面push代码的时候,我测试服务器的代码目录并没有自动更新。我的shell脚本如下:!/bin/bash echo ‘haha:::==’ >> /tmp/wtz.log
cd /srv/www/bfar-ng
echo ‘my name is gitlab’>> /tmp/wtz.log
git checkout master
git pull origin master >> /srv/www/deploy/info.log git pull origin
masterecho ‘you are so cute!!!::’>> /tmp/wtz.log
查看wtz.log 后发现echo ‘my name is gitlab’>> /tmp/wtz.log 和echo ‘you are so
cute!!!::’>> /tmp/wtz.log 都成功写入到日志文件中。但测试服务器项目原代码就是没有自动更新。除非手动git pull
origin master 或者 在终端里面直接执行 上面的shll。它才会更新。 ps:项目目录我都设置777权限了。求教为啥无法执行git命令。
看了下回答,大致是权限问题,这就牵扯如何在shell里面使用sudo的问题了。也不卖关子,直接上答案
echo "123456lhl"|sudo -S git pull
123456lhl是用户名密码,-S后面为需要执行的命令。
以上就是在使用webhookit遇到的问题以及解决方法,后续会继续更新。
源码分析
这个坑先留着,有时间在写。