最近折腾了一套 Django 项目的 CI/CD(持续集成/持续部署)流水线,用的是 Jenkins + Docker,部署在阿里云 ECS(类似 AWS EC2)上。这玩意儿折腾了我好几天,踩了几个坑,今天把核心架构和关键点捋清楚。
技术架构
整体架构分两层:基础设施层和集成安全层。
基础设施层:
- 阿里云 ECS t2.medium 实例(Jenkins 控制器 + 应用宿主机)
- 安全组配置:8080 端口(Jenkins 控制台)、8000 端口(Django 应用)
集成与安全层:
- GitHub 个人访问令牌认证(需要 repo:read、webhook:write 权限)
- Webhook 触发器实现流水线自动化执行
流水线组件
完整的流水线包含这几个阶段:
- 源码管理:GitHub 仓库轮询
- 构建阶段:从 Dockerfile 构建 Docker 镜像
- 容器管理:停止已有容器、清理未使用镜像
- 部署:docker run 并配置端口映射和环境变量
自动化流程
完整的流程链路:
代码推送 → Webhook 触发 → Jenkins 构建 → Docker 容器化 → 自动部署
这条链路打通之后,每次往 GitHub 推代码,Jenkins 自动拉取、构建镜像、停掉旧容器、跑新容器,全程不用人工干预。
几个坑
搞这套流水线踩了这些坑:
- 安全组规则一开始只开了 8000,结果 Jenkins 控制台访问不了,加上 8080 才解决
- Docker 镜像清理没做好,磁盘占用越来越大,得加上 docker system prune
- Webhook 权限不够,Jenkins 收不到推送通知,PAT 权限要手动加上 webhook:write
关键收获
- 基础设施即代码(Infrastructure as Code)思想,用配置文件管理环境
- 容器编排基础,理解 docker run 的各项参数
- CI/CD 认证安全最佳实践,权限要最小化
这套方案适合中小型 Django 项目,如果流量上来,后续可以加个负载均衡和多实例部署。
原文链接:https://dev.to/...