# NGINX CI/CD 配置说明

本目录包含了为 NGINX 项目定制的 Git Action 工作流配置文件。

## 工作流文件说明

### 1. `build-ubuntu.yaml` - 主要构建流程
这是主要的构建和部署流水线，适用于生产环境：

- **触发条件**: 代码推送和 Pull Request
- **功能**:
  - 在 Ubuntu 22.04 上编译 NGINX
  - 包含完整的模块配置（SSL、流处理、图像处理等）
  - 创建 Docker 镜像并推送到 Harbor 仓库
  - 进行基本的功能测试
  - 上传构建产物

### 2. `build-multi-platform.yaml` - 多平台构建
用于发布版本的完整构建流程：

- **触发条件**: 标签推送、工作流手动触发
- **功能**:
  - 多 Ubuntu 版本支持（20.04、22.04）
  - 配置验证和编译测试
  - 安全漏洞扫描
  - 完整的 Docker 镜像构建和发布

### 3. `build-dev.yaml` - 开发测试流程
用于日常开发的快速验证：

- **触发条件**: develop 分支和 feature 分支推送
- **功能**:
  - 快速构建（最小配置）
  - 代码质量检查
  - 多编译器兼容性测试（GCC、Clang）
  - 构建缓存优化

## 配置要点

### 依赖库安装
根据 NGINX 官方文档，安装了以下依赖：
- `libpcre3-dev` - 正则表达式支持
- `zlib1g-dev` - 压缩支持
- `libssl-dev` - SSL/TLS 支持
- `libxslt1-dev` - XSLT 模块
- `libgd-dev` - 图像处理模块
- `libgeoip-dev` - GeoIP 模块

### 编译配置
使用 `./auto/configure` 脚本进行配置，主要特性：
- HTTP/2 支持
- SSL/TLS 加密
- 流处理模块
- 图像过滤器
- 地理位置模块
- 负载均衡功能

### Docker 镜像
- 基于 Ubuntu 22.04
- 运行时优化（仅包含必要的运行时库）
- 健康检查配置
- 非 root 用户运行

## 环境变量配置

需要在仓库设置中配置以下 Secrets：

```
HARBOR_REGISTRY    # Harbor 仓库地址
HARBOR_USERNAME    # Harbor 用户名
HARBOR_PASSWORD    # Harbor 密码
```

## 使用说明

### 开发流程
1. 在 `develop` 或 `feature/*` 分支上工作
2. 推送代码会触发 `build-dev.yaml`，进行快速验证
3. 创建 Pull Request 到 `main` 分支
4. 会触发完整的构建测试

### 发布流程
1. 合并到 `main` 分支后，创建版本标签
2. 推送标签会触发 `build-multi-platform.yaml`
3. 执行完整的多平台构建和安全扫描
4. 自动构建并推送 Docker 镜像

### 手动触发
可以在 Actions 页面手动触发 `build-multi-platform.yaml` 工作流。

## 构建产物

- **二进制文件**: 上传到 GitHub Actions Artifacts
- **Docker 镜像**: 推送到配置的 Harbor 仓库
- **版本标记**: 支持语义化版本标签

## 故障排除

### 常见问题
1. **依赖安装失败**: 检查 Ubuntu 版本和包名称
2. **编译错误**: 查看具体的编译器错误信息
3. **Docker 推送失败**: 检查 Harbor 凭据配置
4. **测试失败**: 检查 NGINX 配置文件语法

### 调试建议
- 查看 Actions 日志中的详细输出
- 本地使用相同的命令进行测试
- 检查依赖库版本兼容性

## 性能优化

- 使用 `make -j$(nproc)` 进行并行编译
- 配置构建缓存减少重复下载
- 分阶段构建减少单次运行时间

## 安全考虑

- 定期更新基础镜像
- 运行 Trivy 安全扫描
- 使用非 root 用户运行容器
- 及时更新依赖库版本
