HagiCode 实践:如何利用 GitHub Actions 实现 Docusaurus 自动部署

简介: 本文介绍了为AI代码助手HagiCode(原PCode)集成GitHub Pages自动部署的完整实践:基于Docusaurus框架,通过GitHub Actions实现main分支推送后自动构建、上传至gh-pages分支,解决手动部署低效易错问题,显著提升文档发布效率与可靠性。(239字)

为 HagiCode 添加 GitHub Pages 自动部署支持

本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。

背景/引言

在 HagiCode 的开发过程中,我们遇到了一个很现实的问题:随着文档和提案越来越多,如何高效地管理和展示这些内容成了当务之急。我们决定引入 GitHub Pages 来托管我们的静态站点,但是手动构建和部署实在是太麻烦了——每次改动都要本地构建、打包,然后手动推送到 gh-pages 分支。这不仅效率低下,还容易出错。

为了解决这个问题(主要是为了偷懒),我们需要一套自动化的部署流程。本文将详细记录如何为 HagiCode 项目添加 GitHub Actions 自动部署支持,让我们只需专注于内容创作,剩下的交给自动化流程。

关于 HagiCode

嘿,介绍一下我们正在做的东西

我们正在开发 HagiCode——一款 AI 驱动的代码智能助手,让开发体验变得更智能、更便捷、更有趣。

智能——AI 全程辅助,从想法到代码,让编码效率提升数倍。便捷——多线程并发操作,充分利用资源,开发流程顺畅无阻。有趣——游戏化机制和成就系统,让编码不再枯燥,充满成就感。

项目正在快速迭代中,如果你对技术写作、知识管理或者 AI 辅助开发感兴趣,欢迎来 GitHub 看看~

目标分析

在动手之前,我们得先明确这次任务到底要干啥。毕竟磨刀不误砍柴工嘛。

核心需求

  1. 自动化构建:当代码推送到 main 分支时,自动触发构建流程。
  2. 自动部署:构建成功后,自动将生成的静态文件部署到 GitHub Pages。
  3. 环境一致性:确保 CI 环境和本地构建环境一致,避免"本地能跑,线上报错"的尴尬。

技术选型

考虑到 HagiCode 是基于 Docusaurus 构建的(一种非常流行的 React 静态站点生成器),我们可以利用 GitHub Actions 来实现这一目标。

配置 GitHub Actions 工作流

GitHub Actions 是 GitHub 提供的 CI/CD 服务。通过在代码仓库中定义 YAML 格式的工作流文件,我们可以定制各种自动化任务。

创建工作流文件

我们需要在项目根目录下的 .github/workflows 文件夹中创建一个新的配置文件,比如叫 deploy.yml。如果文件夹不存在,记得先手动创建一下。

这个配置文件的核心逻辑如下:

  1. 触发条件:监听 main 分支的 push 事件。
  2. 运行环境:最新版的 Ubuntu。
  3. 构建步骤:
    • 检出代码
    • 安装 Node.js
    • 安装依赖 (npm install)
    • 构建静态文件 (npm run build)
  4. 部署步骤:使用官方提供的 action-gh-pages 将构建产物推送到 gh-pages 分支。

关键配置代码

以下是我们最终采用的配置模板:

name: Deploy to GitHub Pages

# 触发条件:当推送到 main 分支时
on:
  push:
    branches:
      - main
    # 可以根据需要添加路径过滤,比如只有文档变动才构建
    # paths:
    #   - 'docs/**'
    #   - 'package.json'

# 设置权限,这对于部署到 GitHub Pages 很重要
permissions:
  contents: read
  pages: write
  id-token: write

# 并发控制:取消同一分支的旧构建
concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        # 注意:必须设置 fetch-depth: 0,否则可能导致构建版本号不准确
        with:
          fetch-depth: 0

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 20 # 建议与本地开发环境保持一致
          cache: 'npm'     # 启用缓存可以加速构建过程

      - name: Install dependencies
        run: npm ci
        # 使用 npm ci 而不是 npm install,因为它更快、更严格,适合 CI 环境

      - name: Build website
        run: npm run build
        env:
          # 如果你的站点构建需要环境变量,在这里配置
          # NODE_ENV: production
          # PUBLIC_URL: /your-repo-name

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v3
        with:
          path: ./build # Docusaurus 默认输出目录

  deploy:
    environment:
      name: github-pages
      url: ${
   {
    steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v4

实施过程中的坑点

在实际操作中,我们遇到了一些问题,这里分享出来希望大家能避开(或者提前准备好解决方案)。

1. GitHub Token 权限问题

最开始配置的时候,部署总是报错 403 (Forbidden)。查了好久才发现,是因为 GitHub 默认的 GITHUB_TOKEN 并没有写入 Pages 的权限。

解决方案:在仓库的 Settings -> Actions -> General -> Workflow permissions 中,务必选择 "Read and write permissions"。

2. 构建目录路径错误

Docusaurus 默认把构建好的静态文件放在 build 目录。但是有些项目(比如 Create React App 默认是 build,Vite 默认是 dist)可能配置不一样。如果在 Actions 中报错找不到文件,记得去 docusaurus.config.js 里检查一下输出路径配置。

3. 子路径问题

如果你的仓库不是用户主页(即不是 username.github.io),而是项目主页(比如 username.github.io/project-name),你需要配置 baseUrl。

在 docusaurus.config.js 中:

module.exports = {
   
  // ...
  url: 'https://HagiCode-org.github.io', // 你的 GitHub URL
  baseUrl: '/site/', // 如果你的仓库叫 site,这里就填 /site/
  // ...
};

这一点很容易被忽略,配置不对会导致页面打开全是白屏,因为资源路径加载不到。

验证成果

配置完所有东西并推送代码后,我们就可以去 GitHub 仓库的 Actions 标签页看戏了。

你会看到黄色的圆圈(工作流正在运行),变绿就代表成功啦!如果变红了,点击进去查看日志,通常都能排查出问题(大部分时候是拼写错误或者路径配置不对)。

构建成功后,访问 https://<你的用户名>.github.io/<仓库名>/ 就能看到崭新的站点了。

总结

通过引入 GitHub Actions,我们成功实现了 HagiCode 文档站的自动化部署。这不仅节省了手动操作的时间,更重要的是保证了发布流程的标准化。现在不管是哪位小伙伴更新了文档,只要合并到 main 分支,几分钟后就能在线上看到最新的内容。

核心收益:

  • 效率提升:从"手动打包、手动上传"变成"代码即发布"。
  • 降低错误:消除了人为操作失误的可能性。
  • 体验优化:让开发者更专注于内容质量,而不是被繁琐的部署流程困扰。

虽然配置 CI/CD 刚开始有点麻烦(尤其是各种权限和路径问题),但这是一次性投入,长期回报巨大的工作。强烈建议所有静态站点项目都接入类似的自动化流程。

参考资料


感谢您的阅读,如果您觉得本文有用,快点击下方点赞按钮👍,让更多的人看到本文。

本内容采用人工智能辅助协作,经本人审核,符合本人观点与立场。

元信息

目录
相关文章
|
8月前
|
人工智能 缓存 监控
打造 AI 冒险团:HagiCode 多 Agent 协作配置实战
本文介绍HagiCode项目首创的多AI Agent协作配置方案:通过统一接口(IAIProvider)、工厂模式、ACP通信协议及任务分流机制,让Claude Code、Codex、CodeBuddy等异构AI助手各司其职、协同作战,构建高效稳定的“AI冒险团”,显著提升复杂项目开发效率与输出质量。(239字)
898 2
|
网络协议 C# 文件存储
C# 利用FluentFTP实现FTP上传下载功能
C# 利用FluentFTP实现FTP上传下载功能
1480 0
C# 利用FluentFTP实现FTP上传下载功能
|
存储 人工智能 搜索推荐
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
Mem0 是专为 AI 代理设计的内存层,支持记忆、学习与进化。提供多种记忆类型,可快速集成,适用于开源与托管场景,助力 AI 代理高效交互与成长。
1047 123
一种专为AI代理设计的内存层,能够在交互过程中记忆、学习和进化
|
10月前
|
人工智能 安全 IDE
基于 C# 和 Nuke 打造现代化构建系统的最佳实践
HagiCode项目摒弃传统脚本,采用C#构建系统Nuke:类型安全、跨平台、模块化Target设计,告别拼写错误与环境差异,大幅提升构建可维护性与稳定性。(239字)
198 11
|
11月前
|
JSON API PHP
域名注册状态查询免费API接口详细教程
本文介绍“接口盒子”提供的免费域名注册状态查询API,支持批量检测.com/.cn域名是否被注册。提供PHP和Python调用示例,含完整代码与返回参数说明,助力开发者快速集成域名查询功能,适用于品牌保护、域名投资等场景。(239字)
2140 0
|
存储 SQL 关系型数据库
TiDB,金融级开源NewSQL
本文介绍了国内自研且开源的NewSQL数据库TiDB,它具备分布式强一致性事务、水平扩展、高可用等特性,几乎满足了对数据库的所有需求,堪称数据库中的“六边形战士”。文章回顾了数据库技术的发展历程,从人工管理阶段到文件系统阶段,再到现代的数据库系统阶段。最后,文章总结了TiDB的前景和挑战,指出虽然部署成本较高,但在特定行业和业务领域中具有巨大潜力。
1412 11
TiDB,金融级开源NewSQL
|
5G Linux 网络架构
一款简单纯粹的在线测速工具 - 免费开源 | 基于LibreSpeed开源项目开发
龙腾测速网是由龙毅基于开源项目LibreSpeed美化开发的免费在线测速工具,界面简洁、功能纯粹,支持所有现代浏览器。提供上传下载速度、延迟、抖动等网络信息,测速结果精准稳定,可自动保存并导出历史记录。适用于Windows、macOS、Linux系统,无需安装,打开网页即可使用,是判断网络问题的实用工具。项目完全开源,可自由二次开发。
3853 0
|
监控 安全 测试技术
我们为什么要API管理系统呢?
API 管理系统通过接口标准化与复用、简化开发流程、版本管理、监控与预警、访问控制、数据加密、安全审计、集中管理与共享、协作开发、快速对接外部系统和数据驱动的决策等多方面优势,显著提高开发效率、增强系统可维护性、提升系统安全性、促进团队协作与沟通,并支持业务创新与扩展。
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
2000 1