最近开发过程中使用,django开发的web后台部署在apache服务器中,由于每次部署都需要在github上拉取代码并重新启动apache,对我来说异常麻烦,加之对github 的钩子(webhook)有一定了解,于是想自己动手实践一次,但查了网上例子,大多不适用自己,于是通过百度+尝试,一路磕磕绊绊,总算完成,废话不多说。以下进入正题。
自动化部署的步骤
1、git 本地上传版本分支到github 中(很多人会不明白,或者说想指定某些分支更新的时候才进行自动化部署,这部分操作主要是通过webhook,也就是第三步来过滤的,后续会讲)。
2、github配置webhook。
3、服务器搭建一个webhook服务,用于接收github送的请求,并启动自动化脚本(用于过滤git上传的版本,可以指定当某个分支push时才进行自动化部署,也可以限制提交者来过滤其他用户提交导致的误部署)。
4、编写自动化脚本。
第一步
git本地分支上传版本到github,这种操作比较简单,百度上说的也比较准确,跟着操作即可。
第二步
点击添加钩子,即可配置回调函数了。
这里大家会有一个疑问,PayloadUrl要如何设置,这也是我当初配置时,百度上搜不清楚的地方,这个url表示的是在github接收到用户push的代码时,会触发此webhook(钩子),向此url发送一条消息,具体的消息内容如下(具体可以在push后在webhook的页面下查看push内容)
点击后即可出现如下信息,以下信息在服务端webhook服务器过滤时(起着至关重要的作用)。
钩子是什么
钩子,简称webhook,是github提供的一个可以方便用户对提交的代码,进行自动化部署的一个回调函数。通俗的来说,本地编辑的代码,通过github 上传到服务器,服务器在通过钩子,发送一个请求到服务器。所以说钩子的本质就是一个http请求,他包含一些参数,截图如下:
(截取自github)。
也就是当我们push一个版本到 github时,会触发webhook发送一个 请求到服务器,请求的接口及内容入上图。
第三步
服务器端的webhook服务器代码我是在github上拉取的别人写好的现成的webhook代码,用的go语言编写的,当然如果你技术实力可以,不屑使用,也可以自己写webhook服务监听代码。
github项目地址:https://github.com/adnanh/webhook
拉取该代码后就是应用了
接下来我教你们如何编辑配置文件hooks.json,在拉去github代码后,在该程序的根目录创建hooks.json配置文件,需要配置的内容如下:
- 配置监听的webhook名称
- 配置过滤条件(分支,提交者)等
- 配置bat,脚本文件的工作目录
其中上面配置文件中的id:表示github中配置webhook页面配置的Payload URL中的hooks/id ,hooks为固定参数,id 则为我们自己配置的即可。
配置过滤条件则我配置的是判断监听是分支和版本提交者两个是与关系(and),也都是两个都符合才会触发脚本.bat脚本。
最后是编写.bat脚本, 脚本我是放在我程序目录下,方便管理。
hooks.json配置的脚本工作目录如果配置正确,则.bat脚本就无需第一步的路径配置过程。
以上配置均配置成功过,则可以先开启webhooks服务,来监听github的push操作。
在webhooks 的目录下,可以通过webhooks -hooks hooks.json -verbose 来启动webhooks监听服务,默认监听的9000端口。
到此我们的webhook 自动化部署过程已经完成。
希望以上内容对各位迷途的小伙伴有所帮助。