122 lines
3.3 KiB
Markdown
122 lines
3.3 KiB
Markdown
# 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 用户运行容器
|
||
- 及时更新依赖库版本
|