如何用Github actions部署Hugo博客到gh-pages

其实这是一篇重建博客的文章,新的方式只为更稳定更快更方便更少的调试。

为何会再次用这个方式部署博客?因为

  1. Blogdown 生成的博客环境在 Rstudio 中时灵时不灵,我不可能每一次重装都要把 Blogdown 折腾一遍,真是太过分了;
  2. Blogdown安装在 CentOS 7 下面有个巨大的坑(这个随后提到如何解决),我就是要避免安装Blogdown,快速开始写字;
  3. 博客写作环境可以更简单点的,虽然用Blogdown+Netfliy+Github你可以成功,但是不够灵活和通用;
  4. 方法都是现成的,要做的就是优化流程; 开始前你需要了解什么是Github、Actions、gh-pages、Git以及Hugo以及这样折腾下来一套流程对你是不是适用。 本文主要用来记录这样重建过程。

详细流程

1. Github 设置

1.1 创建两个GitHub仓库

创建名为 yourID.github.io.source 的仓库,我们称之为源码仓库,你也可以将源码仓库设置为 Private,看个人需求。

创建名为 yourID.github.io 的仓库,我们称之为发布仓库,且只能为public公开;

1.2 分别为两个仓库绑定 SSH Key

当通过Git提交源码之后,Github Actions会编译生成静态文件并通过Git Push到 yourID.github.io的发布仓库,这一步需要 Git 账户认证,因此你需要先设定公匙(Public Key)和私匙(Private Key)。 在你电脑的Terminal窗口进行操作

git config --global  --list
git config --global user.name "xxx" # 你的github用户名
git config --global user.email "xxx@gmail.com" # 你的github邮箱
ssh-keygen -t rsa -b 4096 -C "xxx@gmail.com"  # 记得替换成你的邮箱

你可以为密匙设定密码或者回车跳过,按照Terminal窗口中的位置找到名为id_rsa.pubid_rsa的文件,用文本工具或者cat命令即可打开浏览, 然后将以 pub 结尾的公匙添加到 yourID.github.io 发布仓库,将id_rsa私匙添加到yourID.github.io.source 源码仓库。

在 yourID.github.io.source 源码仓库,将id_rsa添加到 Settings – Secrets,务必命名为 ACTIONS_DEPLOY_KEY;

在 yourID.github.io 发布仓库,将id_rsa.pub添加到 Settings – Deploy keys,命名为hugo_keys或其他名字都可以;

2. 本地加载Hugo并调试运行

将 yourID.github.io.source 仓源码库克隆到本地,并用你安装的或者Rstudio初始化Hugo; 现将步骤罗列如下;

2.1 如果你用的是Rstudio

install.packages("devtools")
devtools::install_github("rstudio/blogdown")
blogdown::install_hugo()
blogdown::hugo_version()
# 0.78.2

两次新建,分先后顺序,分别为

新建1

File -> New Project -> Version Control -> Git -> Repository URL

Repository URL 请在你的源码仓库查看,一般为形如 https://github.com/yourID/yourID.github.io.source.git 的地址,Project Directry name 可以为空;

新建2

File -> New Project -> New Directory -> Website using blogdown -> Directory name

Directory name 不能为空,需要填入自定位的文件夹名称,如001,Hugo Theme 位置填入提前看好的Hugo主题的github位置,如 https://github.com/olOwOlo/hugo-theme-even 就填入 olOwOlo/hugo-theme-even,其他默认即可。

然后用Rstudio上的Build按钮查看拥有even主题的Hugo博客。

2.1.1 Hugo博客中 config.yaml 文件设置

主页的修改以及调整都依赖于config.yaml文件,以下修改为大多数情况下会用到的修改,其他具体请参看对应Hugo主题的配置说明

baseURL: /
languageCode: zh-cn #en-us
title: xx的博客
theme: hugo-theme-even
relativeurls: true 
ignoreErrors: ["error-remote-getjson"]
ignoreFiles: ["\\.Rmd$", "\\.Rmarkdown$", "_cache$", "\\.knit\\.md$", "\\.utf8\\.md$"]

修改完之后,Build -> Clean All -> Build All 即可看到运行结果。

2.2 如果你不经过Rstudio

# 选取一个目录
cd ~/Desktop/
  # 克隆 source 仓库
  git clone git@github.com:yourID/yourID.github.io.source.git
# 进入仓库
cd yourID.github.io.source/
  # 在当前目录生成 Hugo 源码
  hugo new site .
# 为当前博客选取一个主题,你可以不执行这一命令使用默认的主题
git submodule add https://github.com/olOwOlo/hugo-theme-even.git themes/hugo-theme-even
# 编辑 config.toml 配置文件,使 beautifulhugo 主题生效
echo 'theme = "beautifulhugo"' >> config.tomlecho 'theme = "beautifulhugo"' >> config.tom

# 此时你就可以运行预览效果
hugo serve

3. 上传本地调试好的Hugo博客

git add .
git commit -m "first commit"
git push -u origin master

4. 设置Github Actions 自动化发布

前往 yourID.github.io.source 源码仓库配置Actions, Actions -> New workflow 直接将以下文件贴进去,修改远程仓库即可,其他的基本上不用更新;

name: Deploy Hugo Site to Github Pages on Master Branch

on:
  push:
  branches:
  - master

jobs:
  build-deploy:
  runs-on: ubuntu-18.04
steps:
  - uses: actions/checkout@v1  # v2 does not have submodules option now
# with:
#   submodules: true

- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
  hugo-version: '0.78.2'
# extended: true

- name: Build
run: hugo --minify
# 这里我修改了运行参数,初始默认是--minify,但是只更新md文件的时候无法更新时间,经过查找添加以下更多参数
# --gc --minify --cleanDestinationDir --theme=hugo-theme-noteworthy

- name: Deploy
uses: peaceiris/actions-gh-pages@v3
with:
  deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} # 这里的 ACTIONS_DEPLOY_KEY 则是上面设置 Private Key的变量名
external_repository: yourID/yourID.github.io # Pages的远程仓库 
publish_dir: ./public # 推送特定文件夹到远程仓科
keep_files: false # remove existing files
publish_branch: master  # deploying branch
commit_message: ${{ github.event.head_commit.message }}

然后稍等片刻你会在 https://yourID.github.io/ 下看到你的博客内容,和你在本地生产的一样的;

Hugo的文章内容都保存在content目录下面,所以你之后所有的文章写作和更新其实都是在content文件夹下添加markdown文件,以*.MD或者.RMD*结尾的文件,所以你完全可以只写作内容,然后编译和发布交给Github和Github Actions,这样就方便很多了。

接着按往常的更新操作即可瞬间更新博客了啊!!!

WAIT !!! 换电脑换环境了怎么,我要重新做一遍么???

其实到这里还有一个非常重要的技能点,用git命令行只更新content文件内容,只对特定文件或文件夹进行pull或者push操作,这样我就可以真正在云端写内容了!

来看一看效果吧,顺便看下另一篇文章吧,会有收获的!

补充: 未来如何更新你的主题?

最简单的方式是克隆你的博客source code 到本地,然后手动删除主题文件夹,再次拉取主题的Github文件即可。 可能你在Rstudio下的blogdown下预览不成功,但是不要紧,进入public文件夹,直接打开index.html能正常打开预览到博客即可上传你的主题更新;

git clone https://github.com/kimcc/hugo-theme-noteworthy.git themes/hugo-theme-noteworthy

补充: 如何回退到指定版本的git?

打开你项目的 GitHub commit 主页,知道你要回退的commit版本, 然后命令行操作;

git log
git reset --hard <commit ID>
git push -f origin master
# git push -f origin <branch name>
Reference:
  1. https://cloud.tencent.com/developer/article/1647964
  2. https://www.jianshu.com/p/5aa60433850a
  3. https://github.com/reuixiy/io-oi.me/issues/90
  4. https://cosx.org/2018/01/build-blog-with-blogdown-hugo-netlify-github/

comments powered by Disqus