一、CI/CD 概念

1️⃣ CI(Continuous Integration,持续集成)

持续集成是一种软件开发实践,核心思想是:

  • 频繁合并代码到主分支(例如 main 或 develop);
  • 自动化构建和 自动化测试;
  • 尽早发现代码问题,避免集成冲突。

2️⃣ CD(Continuous Delivery / Continuous Deployment,持续交付/部署)

  • 持续交付:确保每次代码变更都可以部署到测试环境或预生产环境,部署流程可自动执行,但最终上线需要人工确认。
  • 持续部署:在持续交付基础上,实现 代码变更自动部署到生产环境,无需人工干预。

🔑 总结

CI/CD 的核心目标:

  • 提高开发效率:减少手动构建和部署操作;
  • 提高软件质量:自动化测试与代码检查;
  • 缩短交付周期:快速将功能交付给用户。

二、CI/CD 在 Django 项目中的作用

Django 项目通常包括:

  • Python 代码;
  • 数据库迁移(migrations);
  • 静态文件收集(collectstatic);
  • 单元测试和集成测试;
  • 可选的 Docker 容器化部署。

CI/CD 可以实现:

  • 自动化构建:安装依赖、代码检查、静态检查;
  • 自动化测试:执行 pytest 或 Django 自带测试框架;
  • 数据库迁移:自动执行 python manage.py migrate
  • 静态文件收集python manage.py collectstatic
  • 自动部署:推送到测试/生产环境服务器或容器平台。

三、CI/CD 流程示意

1
代码提交到 Git → CI 流程 → 自动化构建 → 自动化测试 → CD 流程 → 测试环境部署 → 生产环境部署

四、Django 项目 CI/CD 实践步骤

1️⃣ 环境准备

  • Python 环境(推荐 Python 3.11+)
  • pip 工具或 Poetry 管理依赖
  • Git 仓库
  • 可选 Docker / Docker Compose

CI/CD 平台

  • GitHub Actions
  • GitLab CI
  • Jenkins
  • CircleCI

2️⃣ 示例:GitHub Actions CI/CD 配置

文件路径

1
.github/workflows/ci_cd.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
name: Django CI/CD

on:
push:
branches:
- main
pull_request:

jobs:
build_and_test:
runs-on: ubuntu-latest

services:
postgres:
image: postgres:15
env:
POSTGRES_DB: testdb
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpass
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U testuser -d testdb"
--health-interval 10s
--health-timeout 5s
--health-retries 5

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: 3.11

- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt

- name: Run Django migrations
run: python manage.py migrate

- name: Run tests
run: python manage.py test

deploy:
runs-on: ubuntu-latest
needs: build_and_test
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Deploy to server
run: |
ssh user@server 'cd /path/to/project && git pull && source venv/bin/activate && pip install -r requirements.txt && python manage.py migrate && python manage.py collectstatic --noinput && systemctl restart gunicorn'

3️⃣ Docker 化 CI/CD(可选)

Dockerfile 示例

1
2
3
4
5
6
7
8
9
FROM python:3.11-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD ["gunicorn", "myproject.wsgi:application", "--bind", "0.0.0.0:8000"]

docker-compose.yml 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: '3.8'

services:
web:
build: .
ports:
- "8000:8000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:pass@db:5432/dbname

db:
image: postgres:15
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: dbname

CI/CD 流程可直接在 Actions 或 GitLab CI 中运行 docker-compose builddocker-compose up

五、CI/CD 的优势总结

优势 描述
自动化构建 避免手动安装依赖与环境不一致问题
自动化测试 保证代码质量,降低回归风险
自动部署 加快功能交付,减少人工操作错误
一致性 所有环境(测试、预生产、生产)保持一致
可追踪 每次代码变动都有记录,可回滚

六、最佳实践建议

分支策略

  • main/master: 生产环境
  • develop: 开发集成
  • feature/*: 功能分支

环境隔离

  • 使用虚拟环境或容器
  • 数据库测试用独立实例

测试覆盖

  • 单元测试 + 集成测试 + API 测试
  • 使用 pytest-django 或 coverage

自动化部署

  • 小型项目可直接 SSH 部署
  • 容器化项目可结合 Docker Compose 或 Kubernetes

安全与凭证管理

  • CI/CD 平台使用 Secrets 管理密钥
  • 避免在代码中写明密码或 Token

七、总结

对 Django 项目来说,CI/CD 是保证快速交付、可控部署、稳定运行的关键机制。
建议采用 自动化构建 + 自动化测试 + 自动化部署 的全流程,同时结合 Docker 或虚拟环境管理,提升团队开发效率与项目质量。