Github Actions实现自动化部署Hexo博客

1,344 阅读3分钟

痛点

在Github上面用Hexo建立自己的个人博客,用到了2个仓库,一个用来放hexo的源代码,方便更换设备后依旧可以无缝衔接写博客,另一个仓库用来展示博客网站,放的是发布文章的源代码。

1.png 那么问题就来了,现在我写完博客,既要先同步hexo代码到GitHub仓库,还要发布最新的文章到博客网页,要打两份工,很费时间,那么有没有自动化的工具来处理这些繁杂的工作?当然有的,推荐使用官方的Github Actions。

当我们将hexo代码push到远程仓库后,触发GitHub Actions的workflow,然后workflow会创建一个运行环境,获取到hexo源码,再进行构建和部署,最后发布到博客仓库。也就是说我们只要推送hexo代码,剩下的就由github Actions自动完成。

下面是具体的配置:

配置

生成deploy keys

前面提到两个仓库,一个是博客仓库,是以.gihub.io结尾的,另一个是放置hexo代码的,一定要先区分好这两个仓库。

接下来就要生成密钥,敲入如下命令

ssh-keygen -f github-deploy-key

当前目录下会有 github-deploy-key 和 github-deploy-key.pub 两个文件,我觉得也可以用GitHub配置ssh密钥的这两个文件,不过为了区分,可以单独再创建这两个文件。

配置博客仓库deploy keys

打开博客仓库,结尾是.gihub.io,打开Settings,按照下图操作

2.png

3.png 将github-deploy-key.pub里面的密钥全部复制到Key里面,title可以自己定义。上面的deploy keys是我以前配置的,别管他。

配置Hexo仓库Secrets

打开Hexo仓库的Settings,找到Secrets按照下图操作

将github-deploy-key的内容全部复制到Value中,Name自己定义,上面的2个也是我之前配置的,不用慌。

编写Github Actions

创建配置文件

点击打开Actions 创建workflows

newworkflow.png

setup.png

nodejs.png 可以选择一个nodejs模板,也可以不选,直接复制下面我给出的模板

对照下面的配置模板,选择性粘贴进创建的yml文件,也可以全部粘贴,试试效果,再改

# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the workflow will run
on:
  # Triggers the workflow on push or pull request events but only for the main branch
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  # This workflow contains a single job called "build"
  build:
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      - name: Checkout source
        uses: actions/checkout@v1
        with:
            ref: main

      - name: Setup Node.js
        uses: actions/setup-node@v1
        with:
              node-version: '12'


      - name: Setup Hexo
        env: 
                # HEXO_DEPLOY_PRI_XIAOXIN_WINDOW 这个就是配置hexo仓库secrets的name,一定要对应上
                ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_PRI_XIAOXIN_WINDOW }}
        run: |
                    mkdir -p ~/.ssh/
                    echo "$ACTION_DEPLOY_KEY"> ~/.ssh/id_rsa
                    chmod 700 ~/.ssh
                    chmod 600 ~/.ssh/id_rsa
                    ssh-keyscan github.com >> ~/.ssh/known_hosts
                    git config --global user.email 你的GitHub邮箱
                    git config --global user.name 你的GitHub名字
                    npm install hexo-cli -g
                    npm install
      - name: Deploy
        run: |
            hexo clean
            hexo deploy

简单解释一下,当我们推送内容到远程main分支的时候,就会触发这个Workflow。

使用最新的Ubuntu作为hexo deploy的系统。

首先checkout源代码,然后设置使用最新的Node.js v12 LTS作为node解释器。

接着就是配置SSH相关的配置文件,secrets.HEXO_DEPLOY_PRI_XIAOXIN_WINDOW,这个名字一定要对应配置Hexo仓库Secrets

git config相关的名字和邮件地址替换成大家自己使用的就好了。

最后就是安装Hexo CLI,各个依赖模块和部署了。

验证效果

下面就是运行成功的效果,成功的都会打上勾

6.png

失败了的话可以打开看看哪里报错了,再仔细看看哪里配置不对,再修改。成功了,博客仓库的更新有一点时间的延迟,耐心等待几分钟就好了。

7.png 最后贴上自己搭建的博客网站: xiaoborao.github.io/