你这是什么垃圾浏览器,这都不能显示(╯‵□′)╯︵┻━┻

利用 Github Actions 自动部署 Hexo 博客

Author Avatar
猪蹄宝宝 2月 23, 2021
  • 在其它设备中阅读本文章
vertical_split 601 字  |  timer 2 分钟

介绍

Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行Jobs时,它会创建一个容器 (runner),容器支持:UbuntuWindowsMacOS等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

本文将介绍利用 Github Actions 实现自动部署hexo到 Github Pages,在之前我们需要写完文章执行hexo d -g来部署,当你文章比较多的时候,可能还需要等待很久,而且还可能会遇到本地安装的Node.js版本与Hexo不兼容的问题,目前我就是因为电脑的Node.js版本升到v14版本导致与Hexo不兼容部署不了,才来捣腾 Github Actions 功能的。利用 Github Actions 你将会没有这些烦恼。

前提

生成部署密钥

一路按回车直到生成成功

ssh-keygen -f github-deploy-key

当前目录下会有github-deploy-keygithub-deploy-key.pub两个文件。

配置部署密钥

复制github-deploy-key文件内容,在博客源码仓库的 Settings -> Secrets -> Add a new secret 页面上添加。

Name输入框填写HEXO_DEPLOY_PRI
Value输入框填写github-deploy-key文件内容。

复制github-deploy-key.pub文件内容,在your.github.io仓库 Settings -> Deploy keys -> Add deploy key 页面上添加。

Title输入框填写HEXO_DEPLOY_PUB
Key输入框填写github-deploy-key.pub文件内容。
勾选Allow write access选项。

编写 Github Actions

Workflow 模版

在博客源码仓库下创建.github/workflows/deploy.yml文件,我这里是博客仓库的source分支,目录结构如下。

blog (repository)
└── .github
    └── workflows
        └── deploy.yml

deploy.yml 文件中粘贴以下内容。

name: Hexo CI

on:
  push:
    branches:
      - source

env:
  GIT_USER: Gadfly
  GIT_EMAIL: [email protected]
  DEPLOY_REPO: gadfly3173/gadfly3173.github.io
  DEPLOY_BRANCH: master
  TZ: Asia/Shanghai

jobs:
  build:
    name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
    runs-on: ubuntu-latest
    strategy:
      matrix:
        os: [ubuntu-latest]
        node-version: [10.x]

    steps:
      - name: Checkout
        uses: actions/[email protected]

      - name: Checkout deploy repo
        uses: actions/[email protected]
        with:
          repository: ${{ env.DEPLOY_REPO }}
          ref: ${{ env.DEPLOY_BRANCH }}
          path: .deploy_git

      - name: Use Node.js ${{ matrix.node-version }}
        uses: actions/setup-[email protected]
        with:
          node-version: ${{ matrix.node-version }}

      - name: Configuration environment
        env:
          HEXO_DEPLOY_PRI: ${{secrets.HEXO_DEPLOY_PRI}}
        run: |
          mkdir -p ~/.ssh/
          echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.name $GIT_USER
          git config --global user.email $GIT_EMAIL

      - name: Install dependencies
        run: |
          yarn

      - name: Deploy hexo
        run: |
          yarn release