Skip to main content

Lost Temple

如何利用GithubAction发布Hugo博客

Table of Contents

作为一个老网民,我还是很喜欢折腾博客的。从07年开始就玩各种博客,比如07年搜狐博客,那时候博客热很火,不亚于微博兴起的时候,于是我每天去刷我的搜狐博客访问量,是不是还专门去网吧写文章。 后来还开了新浪博客,一直在新浪博客混混文字,大概一直在新浪博客写了4年。

再后来又买了独立主机,自己开WordPress写博客,无奈后来被人把主机给黑了。但是那时候很快啦,天天找WordPress好看的主题,去别的的WP 搜索好用的插件。各种互加友链。

当然后来还玩了很多其他的博客,比如Google的BlogSpot,Tumbler,对就是那个Tumbler。 还有网易的LOFTER,新浪的绿洲。腾讯的QQ空间,微信公众号。

工作以后,有了Github page,看着大家都用Travis去自动化部署,于是也用HEXO搭建了一个。不过18年后一直没维护了,中途有次冲动想维护起来,发现怎么都跑不起来,于是就懒得动了。

最近大家都用Github Action自动化部署Blog。于是又折腾起来了。整个过程花了几个小时,担心以后忘记又记不起来,在这里简单做个记录。整个流程如下

1、本地安装Hugo
2、用Hugo写好Markdown文章 (hugo new posts/new_post.md) 3、然后将Markdown生成为静态文件
4、将生成的静态站点内容推送到Github发布

一、安装Hugo

mac: brew install hugo

其他系统安装方式见:https://gohugo.io/getting-started/installing/

二、生成静态站点

1、初始化站点

Hugo命令可以自动生成站点需要的文件,后续我们所有的操作命令将会在Hugo生成的目录下执行。

hugo new site hugo-blog

2、进入到hugo-blog目录,cd hugo-blog

3、安装主题
我是通过 git submodule 安装的,确保自己在hugo-blog目录下,执行命令:

git init
git submodule add https://github.com/xianmin/hugo-theme-jane.git themes/jane

4、启用主题

第三步完成后,需要在配置文件中启用主题,配置文件在hugo-blog根目录下。

echo 'theme = "jane"' >> config.toml

5、创建第一篇你的博文

hugo new posts/my-first-post.md

在下方接着写入文章内容即可。注意此时该文件为草稿状态,写作完成后需要改成 draft: false 才能部署。

6、启动 Hugo 预览服务器

Hugo 可以启动一个 Web 服务器,同时构建站点内容到内存中并在检测到文件更改后重新渲染,方便我们在开发环境实时预览对站点所做的更改。命令如下:

hugo server -D

添加 -D 选项以输出草稿状态的文章,执行成功后可以通过 http://localhost:1313/ 访问站点。

7、生成静态站点文件

当主题和文章等配置ok了,就可以生成静态站点界面。

hugo -D

添加 -D 选项可以在结果中包括草稿内容,默认情况下静态页面会输出到根目录下的 public 文件夹中。

三、利用Github Action发布

1、创建静态站点项目

在Github创建一个公共项目,名为username.github.io,这个仓库只放静态内容。注意,username一定要和github用户名相同。

2、创建hugo-blog项目

然后再Github新创建一个私有项目,名字为hugo-blog(保持与上面 第二步《生成静态站点》的目录名字相同),然后添加为我们本地项目文件夹的远程仓库(第二步创建的利用Hugo自动生成的目录)。这个仓库用来维护站点配置和原始的文章内容。

3、添加子模块

因为public里面存的是静态站点文件,所以我们在public创建一个git的子模块,之后这个目录将以 git@github.com:JerryGoodLuck/JerryGoodLuck.github.io.git 作为远程仓库。

git submodule add -b main git@github.com:JerryGoodLuck/JerryGoodLuck.github.io.git public

4、baseurl配置

确保配置文件中的 baseUrl 已经设置为了 <USERNAME>.github.io

5、其他配置

一般还有其他的很多配置,可以根据自己的偏好来配置

6、添加workflows

这个文件所定义的workflow 基于项目仓库运行,但我们需要将运行过程生成的静态文件推送到个人主页仓库 JerryGoodLuck.github.io 完成发布. 相关的deploy任务中按照文档的 Deploy to external repository external_repository 一节做了专门的配置。

我的配置文件如下


name: github pages
   
on:
  push:
    branches:
      - main
  
jobs:
  deploy:
    runs-on: ubuntu-18.04
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: true  # Fetch Hugo themes (true OR recursive)
          fetch-depth: 0    # Fetch all history for .GitInfo and .Lastmod
   
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: '0.79.1'
          extended: true
   
      - name: Build
        run: hugo --minify

   
      - name: Deploy
        uses: peaceiris/actions-gh-pages@v3
        with:
          deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }}
          external_repository: JerryGoodLuck/JerryGoodLuck.github.io
          publish_branch: main
          publish_dir: ./public

7、在本地电脑生成SSH密钥

ssh-keygen -t rsa -b 4096 -C "$(git config user.email)" -f gh-pages -N ""
 # 将在当前目录生成如下密钥文件:
 #   gh-pages.pub (公钥)
 #   gh-pages     (私钥)

8、配置密钥

在 GitHub 分别进入项目仓库和个人主页仓库的 Settings 页面:

  • 将公钥 gh-page.pub添加到 JerryGoodLuck.github.io项目的setting下的Deploy Keys, 命名为HEXO_DEPLOY_PUB, 并设置为 Allow write access。

  • 将私钥 gh-pages 添加到hugo-blog的secrets下的Actions,命名为ACTIONS_DEPLOY_KEY

9、测试

接下来我们测试一下。在本地新增一个测试文章,git提交并推送到Github,预览效果后提交并推送,然后在项目仓库的 GitHub Actions 页面检查相应的 workflow 是否运行成功。

不出意外的话,很快个人主页仓库将新增一个由该 workflow 创建的提交,访问个人博客页面也会发现页面已经更新。

四、总结:

这次利用Github Action搭建Hugo的过程中,还是遇到不少坑。

1、不知道Github Action的语法以及配置文件怎么写,参考文档

2、运行workflow总是失败,后来发现几个关键点:

一个就是静态站点要以submodule的模式放在public目录下

 二个是主题也要是submodule的模式

3、公私钥Key配置的不正确。

### update 2022-08-07 17:06:39 Sunday

Jane主题 full-config : https://github.com/xianmin/hugo-theme-jane/blob/master/exampleSite/full-config.toml