vault backup: 2026-05-27 22:18:59
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
---
|
||||
tags:
|
||||
- CI/CD
|
||||
- Slidev
|
||||
- Docker
|
||||
- Nginx
|
||||
- Gitea Actions
|
||||
create time: 2026-05-27 19:30
|
||||
---
|
||||
|
||||
# CICD 在 Slidev 中的应用
|
||||
|
||||
## 概述
|
||||
|
||||
本文档记录使用 Gitea Actions 实现 Slidev 演示文稿项目的自动化构建与部署流程:代码推送到 `main` 分支后自动构建所有 deck,并将产物部署到基于 Docker 的 Nginx 容器。
|
||||
|
||||
> [!TIP] 本文件夹包含以下子文档:
|
||||
> - [[CICD 在 Slidev 中的应用/workflow-configuration]] — Workflow YAML 逐块详解(触发条件、运行环境、依赖管理)
|
||||
> - [[CICD 在 Slidev 中的应用/deployment-strategy]] — 部署架构深入分析(DooD 模式、Nginx 运作、设计决策)
|
||||
> - [[CICD 在 Slidev 中的应用/Docker-in-Container 部署模式详解]] — DooD vs SID vs DinD vs Kaniko 方案对比
|
||||
|
||||
## 项目背景
|
||||
|
||||
本项目是一个基于 [Slidev](https://sli.dev/) 的多 deck 演示文稿平台,使用 Markdown 编写幻灯片内容。项目中包含多个独立的演示文稿(每个称为一个 **deck**),统一由 `index.html` 的 landing page 进行导航分发。
|
||||
|
||||
**技术栈选型:**
|
||||
|
||||
| 组件 | 选择 | 理由 |
|
||||
|------|------|------|
|
||||
| 演示文稿框架 | Slidev | Markdown + Vue 驱动,适合技术分享场景 |
|
||||
| 代码托管 | Gitea(自部署) | 团队内部私有实例,支持 Actions 兼容语法 |
|
||||
| CI/Runner | Gitea Act Runner(阿里云) | 自建 runner,避免公有 cloud runner 的配额限制 |
|
||||
| 构建工具 | pnpm + Slidev build | 多 deck 批量构建,输出纯静态站点 |
|
||||
| 部署方式 | Docker DooD + Nginx Alpine | 无状态部署,每次重建保证干净环境 |
|
||||
|
||||
**为什么需要 CI/CD?**
|
||||
|
||||
Slidev 的演示文稿本质是静态站点,传统手动部署流程为:本地 `build` → 拷贝文件到服务器 → 重启 Nginx。这种方式的痛点在于:
|
||||
|
||||
- **人工遗漏**:新增 deck 后忘记重新构建或遗漏文件复制
|
||||
- **环境不一致**:本地构建产物可能在服务器上因依赖版本差异出现问题
|
||||
- **协作困难**:多人同时修改不同 deck 时无法自动化集成
|
||||
|
||||
通过 Gitea Actions + Docker 实现自动化后,开发者只需关注 `.md` 内容的编写和提交,构建、部署全流程自动完成——**push 即上线**。
|
||||
|
||||
## 正文
|
||||
|
||||
### CI/CD 流水线概览
|
||||
|
||||
对于一个 Slidev 项目,典型的发布流程可以拆解为以下几个阶段:
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A["📝 push 到 main"] --> B["Gitea Actions 触发"]
|
||||
B --> C["安装系统依赖"]
|
||||
C --> D["检出代码"]
|
||||
D --> E["安装 pnpm + 项目依赖"]
|
||||
E --> F["构建 slides"]
|
||||
F --> G["启动 Nginx 容器"]
|
||||
G --> H["复制产物到容器"]
|
||||
H --> I["网站上线"]
|
||||
```
|
||||
|
||||
### 架构总览
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "本地开发"
|
||||
DEV["开发者\n编辑 .md"] --> PUSH["git push → main"]
|
||||
end
|
||||
|
||||
subgraph "Gitea Runner (阿里云)"
|
||||
ACTION["Gitea Actions Runner"]
|
||||
BUILD["node:22-alpine 容器\n构建 slides → dist/"]
|
||||
end
|
||||
|
||||
subgraph "宿主机 Docker"
|
||||
NGINX["slides-nginx 容器\n8080 → 80"]
|
||||
HTML["/usr/share/nginx/html/\n← dist/ 内容"]
|
||||
end
|
||||
|
||||
USER["访客浏览器"]
|
||||
PUSH --> ACTION
|
||||
ACTION --> BUILD
|
||||
BUILD --> COPY["docker cp"]
|
||||
COPY --> NGINX
|
||||
NGINX --> HTML
|
||||
NGINX --> USER
|
||||
```
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[CICD 在 Slidev 中的应用/workflow-configuration]]
|
||||
- [[CICD 在 Slidev 中的应用/deployment-strategy]]
|
||||
- [[CICD 在 Slidev 中的应用/Docker-in-Container 部署模式详解]]
|
||||
Reference in New Issue
Block a user