使用GitHub Action进行hexo自动化部署

当自己使用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 ghexo d进行部署就完事了。但现在我还需要使用git add,git commit ,git push这一系列操作进行备份,让我感觉有点点繁琐。

想要达到的效果

  1. 自己使用git操作把博客源文件push到远程仓库
  2. 接下来,不需要自己进行hexo g 和hexo d,有服务会自动帮我完成这一系列操作。
  3. 也就是说,我只要把博客源文件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

配置

  1. 在博客源文件仓库 :Settings -> Secrets 里添加私钥,名称为 ACTION_DEPLOY_KEY
    注意,要和私钥文件一模一样,包括start和end也要复制粘贴进去。
  2. 在用于展示,存放.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,但有的人配置了,脚本就需要做出改动。
因此这篇博客可以用于借鉴,但不能直接照抄喔~


上一篇
原码,反码,补码的用途 原码,反码,补码的用途
问题: 为什么计算机里要存在补码,只有反码不可以吗?我们想求 2 - 1,但我们不想在计算机内部用减法去完成这件事 所以,我们可以曲线救国,利用高位溢出,使用2 + 127-128去完成 什么叫高位溢出呢? 1111 1111 + 0
下一篇
marshmallow库的简单介绍 marshmallow库的简单介绍
marshmallow库marshmallow库是用来进行对象序列化(dump/dumps)和反序列化(load/loads)的处理的。 简单来说,就是将python里的object对象与list/dict,json字符串对象三者之间进行相
2021-04-06
目录