经过前面的系列文章的学习和实践,相信你已经成功的利用Hexo构建自己的博客并且部署到了Github上。

目前整个发布博客的流程是,用markdown文件写好博客,然后使用Hexo编译成html, 最后将public下的内容部署到github上。整个过程虽然不复杂,但每次都要重新在本地编译然后上传,多少有些繁琐。

这个时候我们可以寻求一种方法,实现博客自动编译和内容的部署,它就是 Github Actions

什么是Github Actions?

GitHub Actions 是 GitHub 提供的 持续集成与持续部署(CI/CD)平台,允许开发者直接在 GitHub 仓库中自动化构建、测试、打包、发布代码,实现软件开发流程的自动化。通过定义 YAML 格式的配置文件(称为 Workflow),开发者可以定制化代码仓库的自动化工作流程,例如代码提交时自动运行测试、合并分支时自动部署到服务器等。

核心概念

Workflow(工作流)

  • 一个 Workflow 是一个自动化流程,由一个或多个 Job 组成,通过 YAML 文件(.github/workflows/ 目录下)定义。

  • 可以配置 Workflow 在特定事件(如代码推送、Pull Request 创建、Issue 评论等)触发,或按计划定期运行。

Job(任务)

  • 一个 Job 是 Workflow 中的独立任务,包含一系列 Step,默认在一个虚拟机(Runner)上运行。
  • Jobs 可以并行或按顺序执行,支持定义依赖关系(如 Job B 等待 Job A 完成)。

Step(步骤)

  • Step 是 Job 中的最小执行单元,可以是运行 Shell 命令(如 npm install)或调用 Action(预定义的功能模块)。

  • 例如:拉取代码、安装依赖、运行测试、部署到服务器等。

Action(动作)

  • 可复用的代码模块,用于完成特定功能(如检出代码、设置环境、发送通知等)。

  • GitHub Marketplace 提供大量公开 Actions(如 actions/checkout、actions/setup-node),开发者也可自定义 Actions。

举个例子

以下是一个简单的 Workflow 配置(.github/workflows/node.js.yml),用于在 Node.js 项目中执行测试:

name: Node.js CI
on: [push] # 当代码推送时触发 jobs:
build:
runs-on: ubuntu-latest # 使用 Ubuntu 最新版虚拟机
steps:
- name: Checkout code
uses: actions/checkout@v4 # 拉取代码到 Runner - name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20 # 指定 Node.js 版本 - name: Install dependencies
run: npm install # 运行 Shell 命令安装依赖 - name: Run tests
run: npm test # 运行测试脚本

编写自动编译并部署博客脚本

如果需要实现博客的自动化部署,那么有两个步骤要走,一是在push新内容的时候编译,二是编译之后部署到Github pages上。

编译博客

在之前的内容中,我们知道编译markdown文件成html文件使用的命令是 hexo build, 后来我们又将其写入到 package.json里的scripts中并取名为 build, 那么在执行编译的时候可以使用 npm run build来替代之前的命令。

下面我们开始来写自动化脚本,首先在根目录下新建一个./github/workflows/update-blogs.yml文件,整体框架可以参考上面例子,因为使用的都是 Node 环境。

完成一个build操作,要执行的操作分4步骤

  • 拉取代码
  • 配置Node环境
  • 安装依赖
  • 执行编译操作
  • 上传编译内容
name: automaticly update blogs
on:
branches:
- master # master分支
jobs:
build:
runs-on: ubuntu-latest # 使用 Ubuntu 最新版虚拟机
steps:
- name: Checkout code
uses: actions/checkout@v4 # 拉取代码到 Runner - name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20 # 指定 Node.js 版本 - name: Install dependencies
run: |
npm install
npm install -g hexo-cli - name: Run build
run: npm run build # 运行编译操作 - name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3 # 上传public目录内容
with:
path: ./public

修改点:

  • 不想任意分支提交都执行该操作,所以选择 master 分支有提交的时候执行。

  • 安装依赖依赖,需要在全局安装 hexo-cli

  • 上传内容使用的是Github Actions 官方的一个专用 Action: actions/upload-pages-aartifact, 主要用于 将静态网站文件打包并上传为 GitHub Pages 部署所需的 “工件”。

部署博客

在成功编译博客之后,也是通过一个官方的Action来实现博客内容的部署

name: automaticly update blogs
on:
branches:
- master # master分支
jobs:
build:
... # 部署博客
deploy:
needs: build # 依赖上一个build操作
permissions: # # 需授予 Pages 写入权限和生成部署令牌的权限
pages: write
id-token: write
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps: # 使用actions 部署
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

测试验证

编写完脚本之后,提交代码至 master 分支,在Github对应的仓库分支上可以看见已经有对应的workflow,如作者的脚本配置。

如果左侧出现刚才脚本的名称 automaticly update blogs, 则说明已经配置成功了,可以通过提交内容到 master分支来检验脚本的执行情况。

写在最后

到目前为止,整个搭建个人博客系列文章已经实现了个人博客站点的搭建和自动化部署,相信此时的你也搭建好了自己的博客站点。

正如之前所说,博客站点最重要的就是价值输出,也就是要勤写内容。但是有时候,酒香也怕巷子深,如何让更多的人看到自己写的文章,增加个人影响力,这将是后面将要讨论的问题,请持续关注!

搭建个人博客系列--(4) 利用Github Actions自动构建博客的更多相关文章

  1. 利用 Github Actions 自动更新 docfx 文档

    利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...

  2. 5 分钟教你快速掌握 GitHub Actions 自动部署博客

    自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...

  3. 用GitHub Actions自动部署Hexo

    什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...

  4. 如何使用 Github Actions 自动抓取每日必应壁纸?

    如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...

  5. docker微服务部署之:五、利用DockerMaven插件自动构建镜像

    docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...

  6. GitHub + circleCI 自动构建/自动部署 应用

    GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子 比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源 ...

  7. hexo配合github action 自动构建(多种形式)

    已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...

  8. Github webhooks 自动部署博客文章,使用总结【含视频】

    作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ 沉淀.分享.成长,让自己和他人都能 ...

  9. github page+jekyll构建博客的解决方案

    想在github page上构建自己的博客,前几个星期就动手搞了起来,但由于自己对于前端这些东西不是很熟,所以断断续续的,直到今天才把所有东西都搞懂,而且构建出自己的github博客了. 最终效果,大 ...

  10. 基于 Github Actions 自动部署 Hexo 博客

    前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...

随机推荐

  1. directory 用于数据泵 导入、导出创建的目录。

    1.查询directory目录 select * from dba_directories; 2.创建或者修改 directory目录 create or replace directory 目录名称 ...

  2. Audio DSP 链接脚本文件解析

    上篇文章(智能手表音乐播放功耗的优化)讲了怎么优化音乐场景下的功耗,其中第二点是优化memory的布局.那么在哪里优化memory的布局呢?就是在本文要讲的链接脚本(ld)文件里.作为audio DS ...

  3. [每日算法 - 华为机试] leetcode345 :反转字符串中的元音字母「双指针」

    入口 力扣https://leetcode.cn/problems/reverse-vowels-of-a-string/submissions/ 题目描述 给你一个字符串 s ,仅反转字符串中的所有 ...

  4. FastAPI安全认证中的依赖组合

    title: FastAPI安全认证中的依赖组合 date: 2025/04/12 00:44:08 updated: 2025/04/12 00:44:08 author: cmdragon exc ...

  5. Clion搭建C语言开发环境

    1.下载和安装MinGW 1)下载链接:http://www.mingw.org/ 2)选择安装目录,目录尽可能简单(如:D:\MinGW)且不要包含中文和空格 3)添加相关的包 所需的包如下:min ...

  6. Launchpool名词解释

    # 一.什么是Launchpool Launchpool是一种加密货币领域的创新机制,通常由交易所或DeFi平台提供,允许用户通过质押(staking)或锁定特定代币来获得新项目的代币奖励. ## L ...

  7. surging 集成SuperSocket预发布版本2.0

    一.概述 周末在家试着扩展SuperSocket,因为之前都是只支持.net framework, 后面出现支持.NET CORE 的SuperSocket 2.0 ,然后集成进来和dotnetty ...

  8. python,下载图片到本地自定文件夹内的方法

    比如,我们需要下载下面这张图,图片的网络地址:"https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000 ...

  9. MaxKB 开启模型联网搜索

    前言 模型联网搜索是当前大语言模型(LLM)领域的重要技术方向,其核心在于通过结合互联网实时数据与模型推理能力,突破预训练数据的时间限制,提供更精准.动态的回答. 核心应用场景 实时信息补充 例如查询 ...

  10. Yuque Rich Text(语雀富文本编辑器)

    Yuque Rich Text(语雀富文本编辑器) 由于本人觉得语雀编辑器非常好用,很符合我的使用习惯,然后发现语雀的Chrome浏览器插件实现了编辑器的功能,所以将其富文本的功能拆分位一个单独的Vu ...