使用 Github Webhooks 进行网站自动化部署
· 阅读需 5 分钟

前言
对于一些 GitHub 上的仓库,我们希望当代码进入 master 或者其它特定分支时网站能够自动部署。此时,就需要用到 Github Webhooks 功能。本文以静态网站的自动化部署为例,介绍如何配置 GitHub webhook、如何写自动化脚本以及如何开启监听服务等,非静态网站原理也是类似。
Github Webhooks
按照以上的序列图,在启动监听服务之前,我们先配置一下 GitHub webhooks。在对应项目的 Github 仓库最右边有一个 Settings 标签(需要管理员权限),找到 Webhooks -> Add webhook,如下图:

Secret 字段,是我们自己定义的,最好稍微复杂一点。

最会发送一个带有X-Hub-Signature
的 POST
请求。通过它可以验证和我们服务器进行通信的合法性,为了方便我们直接用第三方的库 github-webhook-handler 来接收参数并做监听事件的处理等工作。

Server
自动化 shell 脚本
自动化当然离不开一些脚本的支持,在服务器上选定一个合适的目录,创建 auto_build.sh
,它主要是做 fetch 最新代码、build 等相关工作。
以下是一个简单的 Demo 实现:
#! /bin/bash
SITE_PATH='/home/docsite'
if [ ! -d ${SITE_PATH} ]; then
cd /home
git clone git@github.com:tmf-map/docsite.git
fi
cd ${SITE_PATH}
git fetch --all
git reset --hard origin/master
yarn install --prod
yarn build
rm -rf /home/www/*
cp -rf ${SITE_PATH}/build/* /home/www
这里也可以使用 git pull
, 但不同的项目有可能 build 的时候会导致服务器端的仓库出现文件改动,保险起见建议使用 fetch
+ reset
的方式。
警告
不要直接把网站的静态目录和项目 dist 或者 build 目录当作同一个目录。