前言
最近由于工作需要所以研究了一下GitLab的CI/CD的功能,事后想起荒废了很久的博客,所以萌生了使用GitHub的Actions重新部署一下的想法,这里记录一下安装的过程。
环境说明
- 博客框架: Hexo
- 博客主题: Butterfly
- 托管环境: GitHub Pages
- 源程序仓库: 可以设置成私有仓库,用来保存原始文件
- 页面文件仓库: 用来存放编译后的页面文件
- 更新流程: 编写文章PUSH到源程序仓库,源程序仓库Actions触发预先定义的任务,编译后PUSH到页面文件仓库,页面文件仓库Actions触发默认的github-pages任务部署网页服务。
安装hexo并初始化项目
Hexo依赖于Node.js环境,所以需要先安装Node.js,对于Mac来说,可以去Node.js官网下载安装包也可以通过brew命令安装。还需要安装GIT环境,Mac OS默认已安装。
- 全局安装hexo-cli
npm install -g hexo-cli - 初始化一个名为blog的hexo工程
hexo init blog - 安装依赖
cd blog && npm install - 启动hexo服务
hexo server
安装主题
推荐通过git clone主题仓库到hexo的themes文件夹下,这样比较容易管理
执行命令git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly将主题butterfly安装到hexo的themes文件夹下。
建立源程序仓库
在GitHub建立源程序仓库,名称随意,可以设置成私有仓库,我这里取名为blog。
建立页面文件仓库
在GitHub建立页面文件仓库,如果想通过githubname.github.io访问,需要将仓库命名为githubname.github.io,如果没有这个需求,可以任意取名。
设置秘钥
需要在GitHub设置三个秘钥文件
SSH keys
添加Authentication Keys到GitHub的SSH keys,成功设置后可以免密执行git命令。
ssh-keygen -t rsa -C "your.email@example.com" -b 4096,按提示生成秘钥,也可以一路无脑回车pbcopy < ~/.ssh/id_rsa.pub,拷贝公钥到SSH keysssh -T git@github.com,测试是否可以通过认证。
源程序仓库的Actions secrets
添加私钥blog-deploy-key到源程序仓库的Actions secrets
ssh-keygen -f blog-deploy-key,生成公私钥对pbcopy < ~/.ssh/blog-deploy-key,拷贝私钥到Actions secrets,命名为BLOG_DEPLOY_PRI
页面文件仓库的Deploy keys
添加公钥blog-deploy-key.pub到页面文件仓库的Deploy keys,切记勾选Allow write access ,设置成功后源程序仓库的Actions任务可以PUSH代码到页面文件仓库
pbcopy < ~/.ssh/blog-deploy-key.pub,拷贝公钥粘贴到Deploy keys,命名为BLOG_DEPLOY_PUB
编写blog仓库的Actions文件
新建文件.github/workflows/deploy.yml,编写Actions任务。
1 | name: CI |
自定义主题配置
可以遵照官方建议操作
在 hexo 的根目錄創建一個文件 _config.butterfly.yml,並把主題目錄的 _config.yml 內容複製到 _config.butterfly.yml 去。( 注意: 複製的是主題的 _config.yml ,而不是 hexo 的 _config.yml)
如果某些主题不支持读取根目录下的配置文件,可以考虑使用根目录下的配置文件覆盖主题目录下的配置文件,只需要在Configuration environment任务最后添加cp _config.${{ env.THEME }}.yml themes/${{ env.THEME }}/_config.yml
当然主题可能出现破坏性升级,可以考虑不追踪最新的主题,自己手动更新主题文件,去掉上面的Checkout theme repo任务,并且将themes文件夹添加到git版本追踪中
设置hexo部署路径
在hexo的配置文件_config.yml中,补全设置deploy子参数
1 | deploy: |
以上涉及到的所有branch参数都需要一一对应,源程序仓库和页面文件仓库我都是使用的main分支,主题使用的master分支,按需修改即可,页面文件仓库的Pages也需要设置成对应的分支