菜单

CI/CD 流水线

相关源文件

本文档描述了 HowToCook 存储库的持续集成 (CI) 和持续部署 (CD) 流水线。该流水线自动验证食谱质量,强制执行格式标准,生成文档,并将食谱集作为 Docker 容器发布。有关贡献工作流的信息,请参阅 贡献工作流;有关 Docker 部署的信息,请参阅 Docker 部署

CI/CD 架构概述

HowToCook CI/CD 系统采用 GitHub Actions 来自动化测试和部署流程,确保所有食谱贡献的一致质量。

来源: .github/workflows/ci.yml1-18 .github/workflows/build.yml1-49 package.json16-22

持续集成工作流

CI 流水线在每次针对 master 分支打开拉取请求时自动运行。其主要目的是在接受食谱贡献之前验证其质量和格式。

来源: .github/workflows/ci.yml1-18 package.json16-22

CI 流水线配置

CI 流水线定义在 .github/workflows/ci.yml 中,包含以下关键组件:

组件描述
触发器拉取请求到 master 分支
环境Ubuntu 最新版
Node.js 版本22
主要步骤检出代码,安装依赖,运行 lint 检查

代码检查流程

npm run lint 命令执行 package.json 文件中定义的一系列检查。

  1. textlint:检查和修复文本格式问题
  2. markdownlint:确保 markdown 文件遵循样式指南
  3. manuallint:运行针对食谱的自定义验证

来源: package.json17-21 .markdownlint.json1-8

持续部署流水线

CD 流水线在 master 分支有代码推送时自动执行,通常是在拉取请求合并后。它包含两个顺序执行的作业:

来源: .github/workflows/build.yml1-49 package.json16-22

构建 README 作业

CD 流水线中的第一个作业负责生成和更新文档。

  1. 该作业使用允许其提交更改的个人访问令牌 (PAT) 来检出存储库。
  2. 它设置 Node.js,安装依赖项,并运行构建脚本。
  3. 构建脚本(npm run build)执行 .github/readme-generate.js 来更新:
    • 主 README.md 文件(所有食谱都已正确分类)
    • starsystem 目录中的难度评级文件。
  4. 生成文档后,它会运行 lint 检查。
  5. 任何更改都会自动提交到存储库。

来源: .github/workflows/build.yml8-30 package.json17

构建 Docker 镜像作业

CD 流水线中的第二个作业构建并发布 Docker 镜像。

  1. 此作业仅在“build-readme-file”作业成功完成后运行。
  2. 它使用 GitHub Action 凭证登录 GitHub Container Registry。
  3. 它构建一个包含食谱集及其 Web 界面的 Docker 镜像。
  4. 该镜像被标记为 ghcr.io/anduin2017/how-to-cook:latest
  5. 该镜像被推送到 GitHub Container Registry,供用户使用。

来源: .github/workflows/build.yml32-49

端到端 CI/CD 流程

以下序列图说明了从贡献到部署的整个 CI/CD 过程。

来源: .github/workflows/ci.yml1-18 .github/workflows/build.yml1-49

与存储库系统的集成

CI/CD 流水线与 HowToCook 存储库中的其他系统集成。

来源: .github/workflows/build.yml1-49 package.json16-22

系统集成点

系统与 CI/CD 集成
食谱内容系统CI 验证食谱的格式和内容结构。
文档系统CD 触发 README 生成并更新难度评级。
网页界面CD 构建并发布提供食谱集服务的 Docker 镜像。

自动化脚本

CI/CD 流水线依赖于 package.json 文件中定义的多个自动化脚本:

脚本命令目的
buildnode ./.github/readme-generate.js生成 README 并更新评分。
manuallintnode .github/manual_lint.js执行自定义食谱验证。
textlinttextlint . --fix检查和修复文本格式问题。
markdownlintmarkdownlint ./dishes ./tips验证 markdown 格式。
lint按顺序运行所有 lint 脚本。全面的质量检查。

来源: package.json16-22

配置文件

多个配置文件控制着 CI/CD 流水线的行为:

文件目的
.github/workflows/ci.yml定义 CI 工作流程。
.github/workflows/build.yml定义 CD 工作流程。
.markdownlint.json配置 markdown linting 规则。
package.json定义脚本命令和依赖。

来源: .github/workflows/ci.yml1-18 .github/workflows/build.yml1-49 .markdownlint.json1-8 package.json1-39

总结

HowToCook CI/CD 流水线提供了自动化的验证、文档生成和部署,确保:

  1. 所有食谱贡献都符合质量标准。
  2. 文档保持最新和一致。
  3. 可以通过 Docker 容器轻松访问食谱集。
  4. 内容更改会触发适当的重建流程。

这种自动化使项目能够在最大限度地减少手动干预的同时保持高质量标准,从而使贡献者能够专注于食谱内容而不是基础设施维护。