本文档提供了支持 HowToCook 存储库的部署架构和基础设施组件的详细信息。它涵盖了代码库如何通过自动化管道进行构建、测试、打包和部署。有关贡献流程和质量控制机制的信息,请参阅 贡献工作流程 和 质量控制。
HowToCook 存储库采用全面的 CI/CD(持续集成/持续部署)管道来自动化测试、构建和部署流程。
来源:.github/workflows/ci.yml package.json16-22
来源:.github/workflows/build.yml package.json16-22
持续集成管道在每次拉取请求时运行,以确保在将更改合并到主分支之前代码质量和一致性。
CI 工作流程定义在 .github/workflows/ci.yml,并在拉取请求打开到主分支时自动触发。它执行以下步骤
来源:.github/workflows/ci.yml package.json16-22
持续部署管道在推送更改到主分支时自动构建和部署存储库。
CD 工作流程定义在 .github/workflows/build.yml 并且包含两个主要作业
build-readme-file:生成 README 和相关文件build-docker-image:构建 Docker 镜像并推送到 GitHub Container Registry当代码推送到主分支时,工作流程会自动触发。
来源:.github/workflows/build.yml Dockerfile package.json16-22
Docker 构建过程是一个多阶段过程,用于 lint、构建和准备部署文档。
Docker 构建定义在 Dockerfile,并使用多阶段方法来优化构建过程和减小最终镜像大小
node:22-alpine 作为基础镜像来运行 linting 和构建过程。python:3.11 安装所需的 Python 包并构建 MkDocs 站点。aiursoft/static 作为轻量级基础来提供静态内容。HowToCook 存储库使用 MkDocs 从 Markdown 文件生成静态文档网站。
来源:.github/templates/mkdocs_template.yml package.json17 Dockerfile17
MkDocs 配置是通过模板文件 .github/templates/mkdocs_template.yml 在构建过程中生成。配置定义了
主要插件包括
| 插件 | 目的 |
|---|---|
| same-dir | 允许使用同一目录下的文件 |
| search | 启用站点搜索功能 |
| with-pdf | 生成内容的 PDF 版本 |
| minify | 最小化 HTML 输出 |
来源:.github/templates/mkdocs_template.yml requirements.txt1-5 package.json17
完整的构建和部署工作流结合了上述所有组件。
来源:.github/workflows/build.yml Dockerfile1-25
HowToCook 的基础设施由多个关键组件组成,这些组件协同工作以提供完整的系统。
来源:.github/workflows/build.yml Dockerfile package.json28
HowToCook 的基础设施依赖于几个组件来构建和提供内容。
构建过程中使用的主要 Node.js 依赖项定义在 package.json28-37
| 依赖项 | 目的 |
|---|---|
| textlint | 文本 linting 工具 |
| textlint-rule-* | textlint 规则 |
| markdownlint-cli | Markdown linting 工具 |
| glob | 文件模式匹配 |
Python 依赖项对于 MkDocs 文档生成是必需的,并在 requirements.txt1-5 中列出
| 依赖项 | 目的 |
|---|---|
| mkdocs-material | MkDocs 的 Material 主题 |
| mkdocs-same-dir | 支持同目录文件 |
| mkdocs-minify-plugin | 最小化 HTML 输出 |
| mkdocs-with-pdf | 从文档生成 PDF |
| weasyprint | 由 mkdocs-with-pdf 用于 PDF 生成 |
来源:package.json28-37 requirements.txt1-5
HowToCook 文档通过静态站点进行托管并提供给用户。
站点托管在 cook.aiursoft.cn,如 package.json28 中指定。
Docker 镜像已发布到 GitHub Container Registry,标签为 ghcr.io/anduin2017/how-to-cook:latest,具体配置定义于 .github/workflows/build.yml47-49
来源:package.json28 .github/workflows/build.yml47-49
部署基础架构与仓库结构紧密集成,以确保顺畅运行。
来源:.github/workflows/build.yml package.json .github/templates/mkdocs_template.yml
HowToCook 仓库的部署和基础架构包含一个简化的 CI/CD 流水线,该流水线会自动构建、测试和部署文档。该系统使用 GitHub Actions 进行自动化,Docker 进行容器化,以及 MkDocs 进行静态站点生成。最终部署托管在 cook.aiursoft.cn,方便用户访问食谱内容。