利用github的webhooks实现自动部署

github的webhooks是什么?

github的webhooks允许用户声明在哪些事件触发时向用户指定的URL发送一个POST请求。比如说我在A仓库设置了一个这样的webhook: payload URL 为http://example.com/github/webhook, 触发事件为push; 那么当我向A仓库进行push后,github就会向https://example.com/github/webhook 发送一个POST请求。事件的定义请参阅 https://developer.github.com/webhooks/#events

如何实现?

看完上面的描述,我们首先需要一个http服务器,这是我写的一个专门用于github的webhooks的http服务器,建议配合nginx/caddy的反向代理,当然也可以单独使用。
首先在/etc目录下创建一个github-webhooks目录,再在github-webhooks目录下创建一个config文件(也可以通过-c指定其他的文件),该文件每一行都是一个webhook,一行里有三个参数,参数之间用空格分开。第一个参数是URL的相对路径,第二个参数是Secrect Key(与webhooks设置的一致),第三个参数是可执行文件的路径。当webhook发生时,程序会根据Secrect Key对请求进行校验,检验通过后会根据第三个参数执行对应的程序,并向该程序传入两个参数,第一个参数是事件类型,如"push",和二个参数是request body。下面看一个例子:
可执行文件路径: /usr/local/bin/push.sh,代码如下:

#!/bin/sh
# 打开对应的目录
cd /path/to/example
# 拉取代码
git pull origin master
# 删除之前的部署的代码文件
rm -rf /var/www/example/*
# 重新部署,hugo是一个生成静态网站的工具
hugo -d /var/www/example/
exit 0

/etc/github-webhooks/config的配置如下,其中/gihub/webhook对应着上面的http://example.com/github/webhook。

/github/webhook aabbcc123 /usr/local/bin/push.sh

然后在需要进行webhook的仓库设置webhook即可

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值