huangzhiqiang 5c7293be88
Some checks failed
Build NGINX on Ubuntu / build-nginx (push) Has been cancelled
add action for k8s deploy
2025-06-07 17:40:01 +08:00
..
2025-06-07 17:40:01 +08:00
2025-06-07 17:40:01 +08:00

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. developfeature/* 分支上工作
  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 用户运行容器
  • 及时更新依赖库版本