当自己使用github action完成hexo自动化构建时非常开心!!!相当有成就感!!虽然不是什么大佬的操作,但也算是自己用技术改变自己的生活了!然鹅开心之后发现自己并没有什么人可以分享= =所以就来写篇博客吧~
参考文章:https://blog.si-yee.com/2020/05/26/Github-Action-%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2Hexo/
GitHub Actions 是 GitHub 的持续集成服务。
事实上我不是第一次见到持续集成这个词,之前在公司例会分享tekton时也有讲到这个,但是那个时候自己没有接触过这个词,只感觉好高大上啊,感觉平时把公司代码传到github上就可以自动化构建镜像包好吊好方便啊,然后看例会pdf看完后其实没怎么看懂,所以也没有想过自己去使用这个工具啥的。
但是作为合格的摸鱼实习生没有啥活干,某天灵光一现,就突然想到能不能用类似于持续集成的工具来解决自己使用hexo部署博客时的痒点,说干就干,唉干完后也没啥人能分享,于是就有了这篇博客。
扯淡结束,正文开始。
想要解决的问题
自己使用hexo时的痒点:
平时在本地写完博客后可以使用hexo d把渲染后的静态文件*(在.deploy文件下)*推到github.io仓库进行部署,推送完之后别人即可通过网址 https://oneflybird.github.io/ 来进行访问,所以其实在日常使用中已经很方便了。
但是问题出现在了自己想换电脑写博客的时候:我打开typora刷刷刷写好了一篇文章,想更新一下博客,然后发现我需要本地有博客源文件,这样执行hexo d的时候才可以部署到github.io仓库上。但是由于之前一直在一台电脑上写,没有遇到这个问题,所以一直没有把自己的博客源文件也上传到github上做个备份。
意识到这个问题的我,翻出来自己以前的旧电脑,庆幸自己还好没把电脑进行格式化,美滋滋地把源文件也上传到github上做了个备份。
接下来,在另一台电脑使用git clone
拉下博客源文件仓库即可解决我上面遇到的第一个问题,并且以后可以自由选择不同电脑来写博客啦,不用局限在一台电脑上了~
接下来就出现了一个让我感觉有点点麻烦的问题,也是此次我想使用持续集成服务解决的问题:
在我备份博客源文件之前,使用hexo g
和hexo d
进行部署就完事了。但现在我还需要使用git add
,git commit
,git push
这一系列操作进行备份,让我感觉有点点繁琐。
想要达到的效果
- 自己使用git操作把博客源文件push到远程仓库
- 接下来,不需要自己进行hexo g 和hexo d,有服务会自动帮我完成这一系列操作。
- 也就是说,我只要把博客源文件push到仓库上,我的博客就可以进行自动渲染和部署,自己只要打开博客网站 https://oneflybird.github.io/ 就能够看到自己最新的博客。
解决方案
配置ssh key
目的:让博客源文件仓库有权限把.deploy文件夹推送到io仓库进行部署
生成ssh key
ssh-keygen -t rsa -b 4096 -C "your email" -f ~/.ssh/github-actions-deploy
# 查看key
cd ~/.ssh
cat github-actions-deploy
cat github-actions-deploy.pub
配置
- 在博客源文件仓库 :Settings -> Secrets 里添加私钥,名称为
ACTION_DEPLOY_KEY
。
注意,要和私钥文件一模一样,包括start和end也要复制粘贴进去。 - 在用于展示,存放.deploy文件的**.io仓库:Settings -> Deploy keys** 添加刚刚生成的公钥,名称随意,但要勾选 Allow write access。
添加github action
github检测到Action文件后便会根据Action文件的内容进行自动化操作(类似于脚本)
在博客源文件仓库目录下,新建 .github/workflows/*随便起名*.yml
脚本配置如下:
name: Deploy
on:
push:
branches:
- master
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Node
uses: actions/setup-node@v1
with:
node-version: '10.x'
- name: prepare build env
env:
ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
run: |
# set up private key for deploy
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" | tr -d '\r' > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
# set git infomation
git config --global user.name 'oneflybird'
git config --global user.email '1361569005@qq.com'
- name: NPM
run: npm install
- name: Clean
run: ./node_modules/.bin/hexo clean
- name: Generate
run: ./node_modules/.bin/hexo generate
- name: Deploy
run: ./node_modules/.bin/hexo deploy
把git配置改成自己的即可,具体含义也就不多说了,大家把这个文件推送到博客源文件仓库上,看看仓库action的执行过程应该就会懂了~
完结
最后,当我写完博客推送到源文件仓库是就可以自动触发构建了。
但是,我的脚本仅对自己的博客是有效的,每个人的博客文件可能是不同的,比如我的博客源仓库没有配置Submodule,但有的人配置了,脚本就需要做出改动。
因此这篇博客可以用于借鉴,但不能直接照抄喔~