webhook 部署革命: 使用 fish-hook 自动部署多个应用

2017-02-21 14:33:31 +08:00
 dcalsky

fish-hook

一站式高效管理你多个 github webhook.

背景

等你辛苦建立好了静态博客,却依然要忍受每次本地更新后,还要 ssh 到远程重新 git pull 一遍的痛苦。

当你终于用 webhook handler 写了一堆代码来解决这个应用的部署问题后,你依然发现,还有许许多多的项目等着你为它们写部署代码。

要是有一个集成化的工具,在一个目录里帮我管理所有的 webhook 就好了! fish-hook 就是为此诞生的,它最大的特色就是:极力缩短开发者花在配置上的时间,约定大于配置。

开始使用

安装

安装 python3.5 或更高版本,再用 pip 包管理工具安装 fish-hook

$ pip3 install fish-hook

新建 fish-hook 目录

$ fish-hook init

ssh 进入远程主机后,运行该命令,并且设置一个通用的端口,例如: 2333 。这样就创建了名为fish的目录,这是控制所有 webhook 的总目录。$ cd fish进入该目录。

接收端: 为一个仓库创建 webhook

$ fish-hook new

假如你在 github 上开通了一个名为blog的仓库,并且打算为其开通 webhook 来实现自动部署。那么就输入blog以及你要为此 webhook 设定的密钥。 完成后,blog的 webhook 接收端就部署好了。

发送端: 在 github 上创建 webhook

首先打开仓库的 github 设置页面,然后创建 github webhook ,填入基本信息。 可以注意到Payload URL这一栏,前面的 IP 地址就是你远程主机的外网 IP 地址,之后是你刚刚设置的端口,斜杆后就是blog目录,与接收端的名字相同。 密钥一栏当然也要与在 fish-hook 上设置的相同。

设置接受 push 事件后的动作

假设你使用git push推送了新的内容到 blog 仓库,如何执行特定的 shell 脚本呢? 此时的 fish-hook 目录是这样的:

fish/
	config.json
	blog/
		app_config.json
		push.sh

为什么有一个 push.sh 文件呢?就这意味着,当你仓库接受新的 push 事件后, fish-hook 就会运行push.sh这个 shell 脚本,里面的内容完全可以自己设置。

这就是所谓的约定大于配置, webhook 接受到什么样的命令,就会运行相同名字的 shell 脚本,当然前提是你的目录里要存在这个脚本。

上线

$ fish-hook server

fish-hook 为你封装了部署所需的 web server 。一条命令即可启动,此时所有的 webhook 都会被启用。

开启 2333 端口

centos 默认开启了端口防火墙,如果你使用了一些具备安全组的云主机服务,也需要开放所有安全组哦。

$ sudo firewall-cmd --zone=public --add-port=2333/tcp --permanent

生产环境

使用 Screen

screen -d -m fish-hook server

fish-hook主目录运行该命令,即可使 fish-hook server 持久运行下去。

webhook 事件们

events

更多帮助

请查看 github 仓库fish-hook

2097 次点击
所在节点    分享创造
7 条回复
dcalsky
2017-02-21 15:15:12 +08:00
github 地址可能贴的不明显: https://github.com/dcalsky/fish-hook

感恩 star
kslr
2017-02-21 16:27:28 +08:00
需要开外网端口是很严肃一件事。
dcalsky
2017-02-21 16:28:59 +08:00
@kslr 也可以使用 nginx 进行反代呀,这个看自己需要
kslr
2017-02-21 16:35:27 +08:00
@dcalsky 如果基于 webhook 看起来只能这么办了,如果是内部基于特定 tag 呢?
est
2017-02-21 16:41:45 +08:00
有那么麻烦么。。。


@app.route('/.secret_update')
def secret_update():
import subprocess
subprocess.Popen('git pull')
# 再让进程自己重启一下就行了。
wobuhuicode
2017-02-21 17:57:55 +08:00
为了安全,麻烦点还是必须的……
dcalsky
2017-02-21 21:31:13 +08:00
@est 能少写一点是一点,程序员不都是这样的么

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/342054

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX