ie9.org

北美创业者的日常

让Github Actions自动构建Hugo博客

2020-03-17 2 min read Technology Tang

自从Github Actions发布之后总想找机会一探究竟,今天花了点时间终于在本站上配置好了,总体上和Gitlab的CI/CD比较相似,顺便记录一下。

准备工作

创建一个repo,或者使用已有的,我这里使用的是top.github.io。在这个项目中新增一个分支,例如名称为hugo,这样做的目的是Hugo源码使用这个分支,最终生成的HTML使用master分支。以后只需要在hugo分支中更新文章,提交之后Github Actions会自动将生成的结果提交到master分支,而master分支是默认托管在Github Pages的,所以就实现了在Github上的CI/CD。

Github Actions配置文件

创建.github/workflows/build-deploy.yml文件:

name: github pages

on:
  push:
    branches:
      - hugo # 让Actions只检测这个分支的提交

jobs:
  build-deploy:
    runs-on: ubuntu-18.04
    steps: # 多个步骤如下表示
      - name: Checkout master
        uses: actions/checkout@v1

      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: 'latest' # 这里可以指定特定版本,我比较随意直接使用latest
          extended: true

      - name: Build
        run: hugo --minify

      - name: Deploy to master
        uses: peaceiris/actions-gh-pages@v2 # 我试过使用@v3版本,过程总是报特殊字符错误,所以使用@v2版本
        env:
          ACTIONS_DEPLOY_KEY: ${{ secrets.ACTIONS_DEPLOY_KEY }} # 大写的这个名称记下来,后面会用到
          PUBLISH_BRANCH: master # Github自动托管这个分支
          PUBLISH_DIR: ./public

配置Repo

使用以下命令生成Deploy KeySecret

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f secret -N ''

secret.pub的内容配置到项目设置中的Deploy keys中,名称无所谓,勾选允许写入。再将secret的内容配置到项目设置中的Secrets中,名称须与以上配置文件中的大写字母相匹配。配置完之后这两个文件就没用了,删之。

设置自动更新ie9.org

在ie9.org的服务器上设置一个webhook,同样配置在repo的设置中,这样每次提交代码之后,Github就会自动和webhook server通讯,激活配置的脚本间接运行git pull origin master就可以实现更新网站了。

至于为什么不在Github Actions中直接远程更新网站,主要的考虑还是安全问题。从合理性的角度看,虽然webhook server依然必须存在,但低耦合的设计保证了有限的权限开放和灵活的配置方式,这样做还是值得的。

2020-03-26 更新

晚上把域名ie9.org绑定在Github Pages上,这样我的主机就彻底用不上了。整个架构更加简洁——在hugo分支更新内容,提交之后就自动更新到主站上,和带后台的管理系统没有区别了。

参考

comments powered by Disqus