使用 GitHub Pages 可以很方便的将静态网站部署到公网,Hugo 生成的静态博客也同样适用。 不过,每次都手动将网站代码 push 到运行 GitHub Pages 的仓库,虽然操作不麻烦但未免也太重复枯燥, 而通过 GitHub Actions 可以有效减少重复工作,提高工作效率。
事前准备
首先,明确我们的自动化逻辑:
确定博客源码的获取源
首先要让 GitHub Actions 能够获取博客源码,也就是 Markdown 文件,通常用 GitHub 仓库即可。
另外,有的博主也许并不想直接或间接地暴露 Markdown 源文件…… 虽然没尝试太多,理论上,获取源也可以是其他平台的代码仓库,甚至是自己的 SFTP 服务器。 只要你有能够安全访问它的方式即可,这里为了稳妥,只讲源码存储在 GitHub 仓库的情况。
确定构建时机
如果获取源是 GitHub 仓库,通过 push
, pull_request
等操作触发构建则相当容易。
但如果是其他平台的仓库或者SFTP,GitHub Actions 也许不能够及时捕获到源码的变更, 但是通过定时运行 Actions 的方式也可以在一定程度上做到自动化构建·部署。
Note: 当然,也许别的平台也支持类似 GitHub Actions 一样的功能,那直接在该平台创建自动化脚本即可,比如 Huwwei Cloud。
创建 Personal access tokens
下面的脚本中涉及到 commit, push 操作,需要 GitHub 仓库的访问权限, 为了将相应的权限安全地赋予 GitHub Actions,需要用到 Personal access tokens。
选择右上角头像 - Settings - Developer settings - Personal access tokens,
点击 Generate new token
Note 随便填,自己能分清是什么就好。
然后勾选 workflow
和 admin:repo_hook
,勾选 workflow
会强制勾选 repo
,
所以最终创建的 token 将拥有 repo
, workflow
和 admin:repo_hook
权限。
新建 workflow
Note: 至于为什么这里名字变成了 workflow,我也不是很明白。
个人理解是: GitHub Actions
只是 GitHub 提供的这个功能的名字;
这个功能中真正配置、运行的东西叫做 workflow(工作流);
而每个 workflow 中运行的就是经常听到的 job。
感觉有点像 activity 或者说是 BPMN 项目的意思。
通过 GitHub 网页
在 GitHub 仓库页选择 Actions 标签,点击 set up a workflow yourself
新建 workflow。
通过本地手动创建
workflow 其实是在当前仓库当前分支下创建 .github/workflows/
目录,在该目录下创建 .yml
文件,每个 .yml
文件就是一个 workflow 的配置文件。
Windows 不能直接创建 .
开头的目录/文件,可以参考以下命令:
|
|
编写配置文件
以下是根据我的仓库整理的配置文件,可以按需要修改。
Note:
- master 分支运行着 GitHub Pages
- blog 分支存放着 markdown 文件
- blog 分支的
themes/nicesima
目录是 submodule,链接到niceRAM/nicesima
这个仓库。
|
|
至此 workflow 就编写完成了,如果是在网页端编写,最后别忘记点 Start commit
保存配置文件。
主要操作基本都在 steps 里,详细可以参考 官方文档。 在网页端编写时还可以在右侧的 Marketplace 随时搜索需要的 workflow。
测试 workflow
上传一篇文章或随便做点更新并 push,现在打开刚才的 Actions 标签,不出意外就可以看到 workflow runs
,
也就是 workflow 的运行记录。
如果 workflow 运行出错,GitHub 还会发邮件通知,所有 runs 都可以查看完整日志和 workflow 配置文件, 对问题定位有很大帮助。