真正快捷的多机部署方法!
不是在采坑,就是在采坑的路上。
更换部署方式的原因
(不关心的朋友可以跳过这一节)
以前许多年一直是hexo clean && hexo g && hexo d
一键部署,这样导致每台机器上都需要配置环境,以前还挺喜欢折腾这些,写过Hexo多机同步 ,但是通过篇幅可以看出,太麻烦,不符合工作后能够快速更换设备的需求。近年来我逐渐注意到CI/CD的方法,先是在Gitlab上体验了一把,确实好用,后来某天惊喜发现Github出了官方的Github Action,于是有了本文的尝试。
更换后,换机再也不用安环境了,只需要把源文件项目git clone
一下,写文,在git add .
、git commit -m 'update'
、git push
三部曲就好啦!
两个项目
源文件 user/blog-source (privare)
前端显示 username/username.github.io (public)
两把钥匙
在源文件项目git bash1
ssh-keygen -f blog-deploy-key
生成
- 私钥
blog-deploy-key
- 公钥
blog-deploy-key.pub
配置:
- 源文件项目 settings - Secrets and variables - Actions 放入私钥
- 前端展示项目 settings - Deploy keys 放入公钥
workflow
创建相关文件夹和文件,源文件根路径下blog/.github/workflows/deploy.yml
参考模板在这里https://github.com/marketplace/actions/hexo-action1
2
3
4
5
6
7
8
9
10
11
12# Deploy hexo blog website.
- name: Deploy
id: deploy
uses: sma11black/hexo-action@v1.0.3
with:
deploy_key: ${{ secrets.HEXO_DEPLOY_PRI }}
user_name: username # (or delete this input setting to use bot account)
user_email: your email # (or delete this input setting to use bot account)
PUBLISH_REPOSITORY: username/username.github.io
BRANCH: master
PUBLISH_DIR: ./public
commit_msg: ${{ github.event.head_commit.message }} # (or delete this input setting to use hexo default settings)
关于主题的配置
这一部分写的人太少,疯狂采坑,我来详细说一下。
主题是作为submodule加入的,但是配置如果不想被看到的话,最好单独写成文件,具体看这里:
但是单独配置文件的写法需要hexo5.0以上才能实现,indigo主题才3.0+,所以最简单的方法是fork原主题后,设置为private。
要访问private项目是需要授权的。
具体做法
- Github-Settings-Developer settings-Personal access tokens-Tokens(classic)-Generate new token(classic)
- 复制该token
- 在源文件项目blog-source中在源文件项目blog-source中:Settings-Secrets and variables-Actions-New repository secret,粘贴该token
- 在workflow的配置文件中写
1
2
3with:
token: ${{ secrets.PERSONAL_TOKEN }}
submodules: true
完整的deploy.yml
1 | name: Deploy |
无伤大雅的缺点
这个应该是git操作的哪个部分出问题了,导致git push
后前端项目历史push记录丢失了,损失就是github页的绿点没了,其它的没什么影响,毕竟前端页面的渲染结果没源文件有用。git reflog
只剩下最新的一条,历史的都丢失了,不过不影响博客就算了。这个问题这些年也遇到好几次了,如果有大佬遇到过一样的问题,如愿赐教,将非常感谢。
参考
Hexo&github action持续部署
Using Git Submodules for Private Content
github action 部署 hexo踩坑记录
Github Actions: submodule 下公私有仓库授权和通信
利用 Github Actions 自动部署 Hexo 博客