hugo 站点发布流程

2019-07-24 14:30:16 hugo

先说下常规的部署流程:

  1. 删除旧的发布文件
  2. 执行hugo名称生成发布文件
  3. 将发布文件复制到一个独立的目录
  4. 提交 git commit
  5. 登录服务器执行git pull

其中因为 hugo 生成发布文件时,不会删除旧的文件,如果我们在写文章过程中有删除操作,必须手动删除原有的发布文件。

git submodule 十分不成熟,为了避免污染主仓库,我们新建一个仓库用户放置发布文件,git 不允许两个仓库处于目录包含结构中。

懒惰是程序员的美德

可以看到常规的发布流程很繁琐,这明显不符合 “懒惰是程序员的美德” 宗旨,我们要简化这个流程。

首先想象最简单的发布流程,包含两个操作:提交 和 发布。

选用 python 的 fabric 库,来对这两个操作实现自动化。

提交

publishdir = '../pystarter.com-publish'

with ctx.cd(publishdir):
    ctx.run('rm -rf *')

ctx.run('hugo -d {}'.format(publishdir))
with ctx.cd(publishdir):
    ctx.run('git add .')
    comment = 'auto commit at ' + datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    ctx.run('git commit -m "{}"'.format(comment))
    ctx.run('git push origin master')

这里对环境有要求:

publishdir 必须存在,且是合法的git目录,并且已配置了remote。

发布

webserver = 'pystarter'
webroot = '/var/www/pystarter.com'
c = Connection(webserver)
with c.cd(webroot):
    c.run('git pull')

也需要提前准备好环境:

  • 本机可以无密码登录到 webserver
  • webserver 主机上的 webroot 目录已经正确配置了发布文件的仓库

完整的脚本参看这里: TODO

将脚本保存在站点根目录下的fabfile.py,成功安装了 fabric 包之后,就可以执行下面的命令了:

fab push  # 提交修改
fab publish  # 发布修改