使用 GitHub Actions 自动发布 Hexo 博客
GitHub Actions 简介
GitHub Actions
是一个持续集成和持续交付 (CI/CD
) 平台,可用于自动执行构建、测试和部署管道。 您可以创建工作流程来构建和测试存储库的每个拉取请求,或将合并的拉取请求部署到生产环境。
GitHub Actions
不仅仅是 DevOps
,还允许您在存储库中发生其他事件时运行工作流程。 例如,您可以运行工作流程,以便在有人在您的存储库中创建新问题时自动添加相应的标签。
GitHub Actions
有一些自己的术语。
(1)workflow (工作流程):持续集成一次运行的过程,就是一个 workflow。
(2)job (任务):一个 workflow 由一个或多个 jobs 构成,含义是一次持续集成的运行,可以完成多个任务。
(3)step(步骤):每个 job 由多个 step 构成,一步步完成。
(4)action (动作):每个 step 可以依次执行一个或多个命令(action)。
环境准备
我的个人站点 Kyire の Blog - 记录美好生活 是通过 Hexo 框架搭建的。
搭建方法可参考:Hexo+Gitee 搭建个人博客 | Kyire の Blog
准备三个仓库:
- 私有
Hexo
源码仓库(Blog
):博客文章以及Hexo
源代码 GitHub
公共静态页面仓库(Kyire6.github.io
):Hexo
源码编译后生成的静态页面Gitee
公共静态页面仓库(Kyire6
):内容跟Kyire6.github.io
一样,只是使用的服务不同
自动部署的流程如下:
GitHub 密钥配置
生成 ssh密钥对
,用于部署静态文件,以及更新 Gitee Pages
服务:
- 生成密钥
执行如下命令生成 ssh密钥对
,替换邮件地址为你的GitHub 邮箱地址:
1 | ssh-keygen -f hexo-deploy-key -t rsa -C "username@example.com" |
命令执行后会生成两个文件:hexo-deploy-key
(私钥) 和 hexo-deploy-key.pub
(公钥)
- 将公钥添加到 Github Pages 仓库中
Kyire6.github.io仓库 -> Settings -> Deploy keys -> Add deploy key
Title
设置为HEXO_DEPLOY_PUB
Key
填写hexo-deploy-key.pub
文件内容- 勾选
Allow write access
选项
- 将私钥添加到博客源码仓库中
Blog仓库 -> Settings -> Secrets -> Actions -> New repository secret
Name
填写HEXO_DEPLOY_KEY
Value
填写github-deploy-key
文件内容
- 将 Gitee 账号密码添加到博客源码仓库中
Blog仓库 -> Settings -> Secrets -> Actions -> New repository secret
Name
填写GITEE_PASSWORD
Value
填写Gitee账号的密码
Gitee 密钥配置
直接使用之前生成的密钥
- 将公钥添加到 Gitee Pages 仓库中
Kyire6仓库 -> 管理 -> 部署公钥管理 -> 添加公钥
和 GitHub
一样需要对仓库有写权限,点击【添加个人公钥】
标题
设置为HEXO_DEPLOY_PUB
公钥
填写hexo-deploy-key.pub
文件内容
配置 GitHub Actions
在博客源码仓库(Blog)中,编写 workflow
文件
在仓库的根目录下创建 .github/workflow/deploy.yml
文件,yaml 文件名可以自定义。
下面是结合 Hexo Action和Gitee Pages Action 的 workflow
文件
1 | name: Hexo deploy |
部分字段解释:
name
:workflow 名称on
:触发 workflow 的事件push
:push 事件paths-ignore
:忽略指定的目录,也就是在忽略路径外的其它目录文件改动时才触发- 还可以设置多种触发条件,比如支持 cron 语法实现定时触发,参考这里
jobs
:执行任务build
:博客编译和发布,发布到 Github Pagessync
:将更新后的 hiyongz.github.io 仓库同步到 Giteereload-pages
:自动更新 Pages,因为 Gitee Pages 不像 GitHub Pages 那样提交代码就自动更新。runs-on
:运行环境,支持 windows,Ubuntu 和 macOSsteps
:指定每个 Job 的运行步骤sma11black/hexo-action@v1.0.4
:博客构建发布,引用了 Hexo Action:wearerequired/git-mirror-action@master
:仓库同步,引用了 git-mirror-actionyanglbme/gitee-pages-action@main
:自动更新 Gitee Pages,引用了 Gitee Pages Action
效果
更新文章之后,提交博客源码到 Blog
仓库,满足 GitHub Actions
条件,触发 deploy.yml
中的编写的流水线:
流水线运行成功,查看 Kyire6.github.io
和 Gitee 的 Kyire6
仓库可以发现都有更新(静态页面公共仓库),并且 Gitee Pages
服务也自动触发更新了,这样就通过 GitHub Actions
实现 Hexo
博客的自动发布。
以后只需要将文章写好之后,push 到博客源码仓库后,触发流水线自动编译并部署,实现 CI/CD 操作,提升效率,避免重复的人工操作!