news 2026/4/17 18:06:35

用 MkDocs + GitHub Actions 自动化部署项目文档

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 MkDocs + GitHub Actions 自动化部署项目文档

用 MkDocs + GitHub Actions 自动化部署项目文档

写文档不是写README凑合,而是把知识做成「可维护的工程产物」。我的目标很简单:
写 Markdown → push → 自动部署到 GitHub Pages,中间不手动干预、不折腾服务器、不装 Node。

下面先说清两样东西干啥,然后把我的方案(配置 + 原因)贴出来。


一、快速说明:MkDocs 和 GitHub Actions 各干什么

MkDocs

  • 静态站点生成器,输入一堆 Markdown,输出一堆静态 HTML(site/目录)。
  • 主题用 Material 非常合适:搜索、暗黑模式、代码复制、Mermaid、Tabs、Admonition 等开箱即用。
  • 本地可以用mkdocs serve做热预览,用mkdocs build生成静态文件。

GitHub Actions

  • CI/CD 工具。我们用它做三件事:检出代码 → 在 runner 上安装 Python 与 MkDocs 依赖 → 运行mkdocs build→ 把site/推到gh-pages分支(用于 Pages)。
  • 常见配套:actions/checkoutactions/setup-pythonpeaceiris/actions-gh-pages(负责把静态文件发布到gh-pages)。

关键思想:把构建行为放到 CI,把发布交给 actions-gh-pages。本地只做编辑与预览,生产环境由 Actions 完成。


我的想法

目标

  • main分支 push 自动触发构建并发布到gh-pages
  • 支持:Material 主题、中文/英文搜索、代码块复制、Git 修订日期显示(基于完整 git 历史)。
  • Actions 环境:Ubuntu runner + Python 3.11。

设计要点(为什么这样)

  1. fetch-depth: 0:必须的——git 插件需要完整历史才能显示创建/修改时间。
  2. 在 Actions 里显式pip install需要的插件(Material、awesome-pages、git-revision-date-localized)以避免构建失败。
  3. 使用peaceiris/actions-gh-pages统一负责把site/推到gh-pages,简洁可靠。
  4. 本地先mkdocs serve调试,Actions 只做非交互式构建与发布。

三、我的mkdocs.yml(直接用的配置 — 把占位符换成你的)

下面是我最终用的mkdocs.yml(照你之前给的大体结构整理,去掉了多余解释,保留功能与插件配置)。你可以直接放到仓库根目录:

site_name:${SiteName}# 替换为站点名site_description:$siteDescriptionsite_author:$SiteAuthorcopyright:"Copyright © $currentYear $SiteAuthor - 保留所有权利"docs_dir:"$DocDir"theme:name:materiallanguage:zhlogo:Awesome-Embedded.pngfavicon:Awesome-Embedded.icopalette:-media:"(prefers-color-scheme: light)"scheme:defaultprimary:indigoaccent:indigotoggle:icon:material/brightness-7name:切换至暗色模式-media:"(prefers-color-scheme: dark)"scheme:slateprimary:blackaccent:indigotoggle:icon:material/brightness-4name:切换至亮色模式font:text:Robotocode:Roboto Monofeatures:-navigation.instant-navigation.instant.prefetch-navigation.instant.progress-navigation.tracking-navigation.sections-navigation.expand-navigation.path-navigation.indexes-navigation.top-navigation.footer-toc.follow-toc.integrate-search.suggest-search.highlight-search.share-content.code.copy-content.code.select-content.code.annotate-content.tabs.link-content.tooltips-content.action.edit-content.action.viewmarkdown_extensions:-abbr-attr_list-def_list-footnotes-md_in_html-tables-toc:permalink:truepermalink_title:链接到此章节slugify:!!python/object/apply:pymdownx.slugs.slugifykwds:case:lower-admonition-pymdownx.details-pymdownx.highlight:anchor_linenums:trueline_spans:__spanpygments_lang_class:truelinenums:truelinenums_style:pymdownx-inline-pymdownx.inlinehilite-pymdownx.superfences:custom_fences:-name:mermaidclass:mermaidformat:!!python/name:pymdownx.superfences.fence_code_format-pymdownx.tabbed:alternate_style:truecombine_header_slug:trueslugify:!!python/object/apply:pymdownx.slugs.slugifykwds:case:lower-pymdownx.emoji:emoji_index:!!python/name:material.extensions.emoji.twemojiemoji_generator:!!python/name:material.extensions.emoji.to_svg-pymdownx.caret-pymdownx.mark-pymdownx.tilde-pymdownx.keys-pymdownx.smartsymbols-pymdownx.snippets-pymdownx.critic-pymdownx.betteremplugins:-search:separator:'[\s\u200b\-_,:!=\[\]()"`/]+|\.(?!\d)|&[lg]t;|(?!\b)(?=[A-Z][a-z])'lang:-zh-enpipeline:-stemmer-stopWordFilter-trimmer-awesome-pages-git-revision-date-localized:enable_creation_date:truefallback_to_build_date:truetype:datetimetimezone:Asia/Shanghailocale:zhextra:social:-icon:fontawesome/brands/githublink:https://github.com/Awesome-Embedded-Learning-Studioname:GitHub-icon:fontawesome/solid/paper-planelink:$Emailname:发送邮件extra_javascript:-javascripts/mathjax.js-https://polyfill.io/v3/polyfill.min.js?features=es6-https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js

说明(要点)

  • docs_dir指向你的 Markdown 源目录(默认docs,可以改)。
  • git-revision-date-localized需要fetch-depth: 0才能正确显示创建/更新时间(下面 Actions 已配置)。
  • 如果不需要 MathJax,去掉extra_javascript里的 MathJax 条目以加速构建。

四、我的 GitHub Actions 工作流

# 工作流名称name:自动部署 MkDocs# 触发条件:推送到 main 分支on:push:branches:-mainworkflow_dispatch:permissions:contents:writejobs:deploy:runs-on:ubuntu-lateststeps:-name:检出仓库uses:actions/checkout@v4with:fetch-depth:0-name:设置 Pythonuses:actions/setup-python@v5with:python-version:"3.11"-name:安装依赖run:|pip install mkdocs-material pip install mkdocs-awesome-pages-plugin pip install mkdocs-git-revision-date-localized-plugin-name:构建网站run:mkdocs build--clean-name:部署到 GitHub Pagesuses:peaceiris/actions-gh-pages@v4with:github_token:${{secrets.GITHUB_TOKEN}}publish_dir:./site

为什么这样写

  • fetch-depth: 0:让git-revision-date-localized能获取完整历史。
  • 明确python-version:避免 runner 默认 Python 版本导致兼容问题。
  • 在 Actions 里安装插件:保证构建环境与本地一致(Actions 是一台干净机器)。
  • peaceiris/actions-gh-pagesGITHUB_TOKEN推送site/gh-pages,无需额外 secret。

五、部署 / 测试步骤(你应该怎么做)

  1. 在仓库根放mkdocs.yml,把docs/写好(index.md必须有)。
  2. 把上面的 workflow 存为.github/workflows/deploy-mkdocs.yml
  3. git add . && git commit -m "add docs site and ci" && git push origin main
  4. 去 GitHub → Actions 看日志,确认mkdocs build成功并且gh-pages分支有更新。
  5. 去仓库 Settings → Pages,确保 Pages 来源是gh-pages(通常 peaceiris 会自动设置)。
  6. 访问https://<username>.github.io/<repo>/(或你配置的自定义域名)。

结语

这就是我的方案:把 MkDocs 的配置尽量放在mkdocs.yml(功能全开),把构建与发布放到 GitHub Actions(可复现、可审计)。你只要维护docs/下的 Markdown,写文档就像写代码一样——有版本、有历史、有自动化。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 17:33:46

Cyberpunk风格Web界面+高精度NER|一站式中文实体抽取方案

Cyberpunk风格Web界面高精度NER&#xff5c;一站式中文实体抽取方案 1. 背景与需求&#xff1a;从非结构化文本中提取关键信息 在当今信息爆炸的时代&#xff0c;新闻、社交媒体、企业文档等场景中充斥着海量的非结构化文本数据。如何从中快速、准确地提取出有价值的信息——…

作者头像 李华
网站建设 2026/4/17 17:44:44

揭秘谐波减速器:机器人关节的精密魔法

我们来详细、通俗地解释一下谐波减速器的原理、用途&#xff0c;以及为什么叫“谐波”和它的结构本质。 1. 原理&#xff1a;柔轮、刚轮和波发生器的“魔法” 谐波减速器的核心原理是利用弹性变形来传递运动和动力。它由三个关键部件构成&#xff1a; 刚轮&#xff1a;一个刚…

作者头像 李华
网站建设 2026/4/17 17:50:27

HY-MT1.5大模型镜像上线|支持33语种互译与术语干预

HY-MT1.5大模型镜像上线&#xff5c;支持33语种互译与术语干预 1. 引言&#xff1a;端侧翻译的“帕累托前沿”突破 在通用大模型争相堆叠参数规模的今天&#xff0c;腾讯混元团队反其道而行之&#xff0c;发布了专为机器翻译&#xff08;MT&#xff09;打造的 HY-MT1.5 系列模…

作者头像 李华
网站建设 2026/4/16 13:48:44

AI智能实体侦测服务核心解析|高精度RaNER模型+动态高亮实战应用

AI智能实体侦测服务核心解析&#xff5c;高精度RaNER模型动态高亮实战应用 在信息爆炸的时代&#xff0c;非结构化文本数据如新闻、社交媒体内容、企业文档等呈指数级增长。如何从这些杂乱无章的文字中快速提取关键信息&#xff0c;成为提升信息处理效率的核心挑战。命名实体识…

作者头像 李华