搭建个人博客系列--(4) 利用Github Actions自动构建博客
经过前面的系列文章的学习和实践,相信你已经成功的利用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自动构建博客的更多相关文章
- 利用 Github Actions 自动更新 docfx 文档
利用 Github Actions 自动更新 docfx 文档 Intro docfx 是微软出品一个 .NET API 文档框架,有一个理念是代码即文档,会根据项目代码自动生成 API 文档,即使没 ...
- 5 分钟教你快速掌握 GitHub Actions 自动部署博客
自从 GitHub 宣布 GitHub Actions 在平台上对所有开发人员和存储库可用以来,GitHub Actions 越来越受欢迎.很多第三方平台在生态系统中有速度等限制,将进一步推动开发人员 ...
- 用GitHub Actions自动部署Hexo
什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...
- 如何使用 Github Actions 自动抓取每日必应壁纸?
如何白嫖 Github 服务器自动抓取必应搜索的每日壁纸呢? 如果你访问过必应搜索网站,那么你一定会被搜索页面的壁纸吸引,必应搜索的壁纸每日不同,自动更换,十分精美.这篇文章会介绍如何一步步分析出必应 ...
- docker微服务部署之:五、利用DockerMaven插件自动构建镜像
docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...
- GitHub + circleCI 自动构建/自动部署 应用
GitHub + circleCI 自动构建/自动部署, 这里略过了单元测试,以部署 laravel 应用为例子 比起 gitlab + ansible + genkins 操作起来节省了很多硬件资源 ...
- hexo配合github action 自动构建(多种形式)
已经使用HEXO正常构建GitHub页面 根据github action 给hexo配置自动部署github page 前往墨抒颖的个人网站查看纯净版 1. 为仓库设置访问密钥 第一步先生成密钥,打开 ...
- Github webhooks 自动部署博客文章,使用总结【含视频】
作者:小傅哥 博客:https://bugstack.cn 原文:https://mp.weixin.qq.com/s/VtTHUfyiITNSoGy052jkXQ 沉淀.分享.成长,让自己和他人都能 ...
- github page+jekyll构建博客的解决方案
想在github page上构建自己的博客,前几个星期就动手搞了起来,但由于自己对于前端这些东西不是很熟,所以断断续续的,直到今天才把所有东西都搞懂,而且构建出自己的github博客了. 最终效果,大 ...
- 基于 Github Actions 自动部署 Hexo 博客
前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...
随机推荐
- 理解和使用Oracle 日志分析工具-LogMiner
分类专栏: oracle日志 原文地址:https://blog.csdn.net/wishfly/article/details/660747 Oracle LogMiner 是Oracle ...
- maven知识理解和生命周期
学习的技能/知识 运动 提升 不足 强化了maven的知识理解和生命周期 3公里日常跑,其中1公里破之前的记录达到3分40 没有赖床,嗯:写完的博客自己阅读又温习了一遍 下午没课,但都用来休息了.. ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(11)
1.问题描述: 鸿蒙push右侧图表没有正常展示. 解决方案: .jpg格式文件,头信息必须是这个"jpg:ffd8". 2.问题描述: 安卓端App在开发者平台申请了Androi ...
- 自定义的 Vue 3 Composition API 钩子,antd标签
1. 创建自定义钩子 useDeviceStatus.js: import { computed } from 'vue'; export function useDeviceStatus(statu ...
- 一些 NuGet 包
Some RestSharp Simple REST and HTTP API Client Newtonsoft.Json Json.NET is a popular high-performanc ...
- ubuntu 22.04安装docker
一.安装 更新软件包索引: sudo apt-get update 允许APT使用HTTPS: sudo apt-get install -y apt-transport-https ca-certi ...
- Dubbo 中的集群容错
前言 在微服务架构中,服务间的依赖关系复杂且动态,任何一个服务的故障都可能引发连锁反应,导致系统雪崩.一个好的容错设计可以避免这些问题发生: 服务雪崩效应:单个服务崩溃或响应延迟可能导致调用链上的所有 ...
- python爬虫(BeautifulSoup)爬取B站视频字幕
比如"https://www.bilibili.com/video/BV1zU4y1p7L3"这个视频,有1.2万条弹幕 首先,B站视频的弹幕是有专门的接口传递数据的:http:/ ...
- 操作系统综合题之“用记录型信号量机制的wait和signal操作来解决了由北向南和由南向北过河人的同步问题(独木桥问题-代码补充)”
1.问题:一条哦东西走向河流上,有一根南北走向的独木桥,要想过河只能通过这根独木桥.只要人们朝着相同的方向过独木桥,同一时刻允许有多个人可以通过.如果在相反的方向上同时有两个人过独木桥则会发生死锁.如 ...
- 数据库问题之“字符编码问题 Cause: java.sql.SQLException: Incorrect string value: '\xF0\x9F\x8E\x81\xE7\x88...' for column 'product_name' at row 41”
1)表1和表2的产品名称[数据库字段]字符编译方式不一致 ①问题 org.springframework.jdbc.UncategorizedSQLException: Error updating ...