ExASIC
分享让工作更轻松

使用git hook来自动更新博客

我们博客一般有两种部署方式:虚拟主机、云服务器(VPS/ECS)。

对于虚拟主机(Apache的一个网站目录)来说,服务商会给我们配置好ftp,通过ftp来上传和管理网站文件。而云服务器(物理服务器上虚拟化的电脑)可以自己安装操作系统和软件,灵活性比较高。所以在云服务器上,我们一般会自己安装git服务器,通过git服务器来更新网站文件。

对于两种部署方式,更新代码后,要么需要手工通过FTP上传,要么需要从git服务器pull或者rsync到网站目录。

一键部署的方法

今天介绍git的hook功能:检测git push命令,一旦检测到就执行一段脚本,用这段脚本来代替之前的手工部署。

Case 1:

ftp

如上图,在本地git仓库里设hook(命令:git ftp push),当从工作目录push版本到git仓库时,就自动执行一次git ftp push。而git ftp push会对比本次修改/增加/删除的文件,只把有差异的文件上传到ftp服务器。

这个比较、上传的功能是由git-ftp实现的,官网:https://github.com/git-ftp/git-ftp。可以上官网查看详细安装和使用方法。

上传到ftp服务器后,由于apache站点目录指向的就是ftp目录,所以网站更新直接受ftp控制。

Case 2:

vps

第二种情况,git push后,版本更新提交到服务器的bare仓库里。然后调用hook脚本(cd htdoc; git pull),先到apache站点目录,再执行git pull,把bare仓库的文件拉取过来。

hook的配置方法

以第二种情况为例,在hook目录里创建post-receive文件:

# emacs ../hook/post-receive

#!/usr/bin/bash

unset GIT_DIR
cd /xx/web
git pull

再把post-receive改成可执行文件:chmod +x post-receive

注:如果git服务器不是bare,文件路径则在../.git/hook/post-receive。

总结

本文简单介绍了利用git hook的功能,以及用post-receive来自动完成网站部署。

由此联想到,除了网站部署外,还可以用post-receive来自动完成regression测试(包括软件测试、硬件验证等领域)。因此,提交代码后的自动化的工作都可以用这个hook来触发。

阅读数:
更多文章:文章目录
解惑专区
(支持markdown插入源代码)
欢迎使用ExASIC订阅服务
仅用于ExASIC最新文章通知,方便及时阅读。
友情链接: IC技术圈问答ReCclayCrazyFPGA