Github Actions Hexo 自动部署

来龙去脉

最近重装了电脑,近几年内每次重装也好,装备新电脑也好,越来越觉得写博客是令我比较头疼的事

因为前几年从 WordPress 迁移到了 Hexo,虽然变成了纯静态,访问速度上提高了。但本地文件的维护、文章的发布就变得很繁琐

比如

  • 重装必须备份
  • 多台电脑必须同步最新的
  • 发布文章需要在本地跑三条命令

多台电脑同步的问题,我在家里树莓派上建了个 git 仓库,专门同步文章。不过大部分时间都会忘记,并且配置文件、主题的配置文件都不在文章目录,所以没法同步

觉醒

最近一次重装我依然是手动备份,重装后看着这个备份,觉得这样下去不行,得赶紧拿出个更完美(懒)的方案

想起之前在一个浏览器插件的仓库看到了自动发布脚本,我有个浏览器插件每次发布都很繁琐,因此早就想研究一下自动化

所以这次第一个念头也是自动化:Github Actions

旧流程

按照之前手动挡的流程是这样的

  1. 清除缓存 hexo clean
  2. 生成静态文件 hexo g
  3. 部署 hexo d(执行一次 git 推送)
  4. 远程仓库 hooks 被触发,自动去网站根目录,git pull

最后网站根目录拉取到文章,部署成功

其中 3 之前你需要在本地手动执行的,而且重装或者换电脑意味着需要在远程服务器配置新的公钥

新流程

新的半自动挡解决了 1-3,你只需要进行一次 git 提交

其他的事情交给 Github Actions

整个流程是

  • 创建密钥,用于连接博客服务器
  • 安装 hexo
  • 安装 hexo 插件
  • 拉取主题
  • 安装主题依赖包
  • 检查主题目录
  • 配置 git
  • 生成静态文件
  • 部署!

工作流配置

name: publish

on:
  push:
    branches:
      - master

jobs:
  publish-blog:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: 14
          registry-url: https://registry.npmjs.org/

      - name: create keys
        run: |
          mkdir -p ~/.ssh
          echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts
          ls -l -a ~/.ssh
      - name: install hexo-cli
        if: steps.cache.outputs.cache-hit != 'true'
        run: npm i -g hexo-cli

      - name: install hexo dependencies
        run: npm i
        working-directory: hexo

      - name: pull themes
        run: |
          mkdir -p hexo/themes
          git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git hexo/themes/butterfly
          echo 'themes config'
          cp hexo/themes_butterfly_config.yml hexo/themes/butterfly/_config.yml
          echo 'background image'
          cp hexo/images/bg.png hexo/themes/butterfly/source/img/bg.png
      - name: install themes package
        run: npm i
        working-directory: hexo/themes/butterfly

      - name: check themes package
        run: ls -l
        working-directory: hexo/themes/butterfly

      - name: git config
        run: |
          git config --global user.name imba97
          git config --global user.email mail@imba97.cn
          git config --global init.defaultBranch master
        working-directory: hexo

      - name: hexo generate
        run: |
          hexo clean
          hexo g
        working-directory: hexo

      - name: deploy!
        run: |
          git init
          git add .
          git commit -m "deploy!"
          git remote add origin root@1.2.3.4:/git/blog.git
          git push --force origin master
        working-directory: hexo/public

经过了大概 40 次左右的测试,最后终于是成功部署

主要问题

期间主要解决 git push 不成功,私钥问题

问题的关键是,你不但需要在 ~/.ssh/ 下创建私钥,还需要创建一个 known_hosts,记录已知的服务器 IP

私钥创建流程,我是在我本地创建了一对密钥,把私钥复制出来放到仓库配置中

工作流使用的时候就把它写入到文件

echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa

记录已知的服务器 IP 也就是工作流的这一步

ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts

其他小问题

主要是主题,主题自定义的配置文件和图片,解决方案是直接放在仓库,复制过去

所以如果你打算用以上工作流,还得根据自己的主题去改改

收工

至此,我本地将不在管理博客的任何东西,甚至写博客都可以随时打开 Github 来写,比如现在

而且依然也可以在本地写,如果换主题肯定还是要本地跑一下测一下的

总之,爽到了

其他补充

为啥说是半自动挡呢,因为我感觉服务器部分也需要继续优化,不能通过 git hooks 的方式部署,这样的话迁移到另一台服务器还得配置一遍,也是很麻烦的

之后考虑在工作流中用 sftp 直接上传的方式部署,需要解决的问题是生成静态文件数量非常多,目前考虑可以先压缩,再上传,再给博客服务器发送解压命令

等不懒了搞一搞,再水一篇文章 ( ´_ゝ`)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355

推荐阅读更多精彩内容