使用GitHub的Webhooks自动部署Ghost主题

最近几天在做Ghost的主题Adam,但是想要在远程调试就必须得ssh到服务器执行一下命令,光是cd path/to/theme就够烦了。于是想办法是否能让服务器自动从github上面pull代码,然后自动执行自定义命令让代码生效。

让服务器自动部署主题命令有两个方法:

  1. 用Crond执行周期任务,比如1分钟去git取一次。但是这样实时性其实并不那么好,并且如果任务所需负载较大(我就是这种情况,因为主题需要用Grunt跑一堆命令才能生效),那就更无法接受了。

  2. 用GitHub webhooks监听GitHub发来的HTTP POST请求。

但是网上关于webhooks的资料实在是少之又少,中文的也基本上没有。自己也是弄了半天才搞明白,原谅我不是做web的吧,我只是一个手游客户端程序员 :D

详细资料可以在GitHub Developer API Webhooks找到。这里之做一些简单的说明。


GitHub Webhooks是怎么工作的?

 

设置钩子

在GitHub上,每个仓库(repository)都可以设置一个或多个自己专属的钩子,且每个钩子都可以设置独立的触发事件(Events)。

这里列举两个事件:

事件类型 描述
push 仓库有push时触发。默认事件
create 当有分支或标签被创建时触发
delete 当有分支或标签被删除时触发

下面讲一下webhooks的设置

事件内容

Headers中:

头 描述
X-Github-Event 触发POST请求的事件名称。
X-Hub-Signature 用设置的Secret加密的哈希(如果有设置secret的话)
X-Github-Delivery 本次POST的全局ID(UID)

body中的内容,由事件不同而不同,就不做赘述了。具体可以看event types


怎么使用hooks?

其实上面说了那么多,要使用钩子其实很简单。

  1. 在仓库的settings中添加一个钩子。
  2. 设置Payloads URL为你准备监听的地址,比如http://fancycoding.com:1234
  3. 如无必要,可以不设置secret加密。
  4. 选择监听的事件类型,我只需要监听push,所以默认即可。
  5. 如果你需要监听到事件后执行git命令,记得把key加入仓库的Deploy keys中。(此步骤根据个人需要可选)。
  6. 自己写一个监听程序,解析header判断事件,然后执行你自己想要的命令吧。

嗯,第六步虽然说着简单但是还是要折腾一番。我折腾了大半天弄了个基于nodejs的监听程序Cherry-hooks,很简单,但足够我的情景用了。

猜你喜欢

转载自duchengjiu.iteye.com/blog/2156722