Python进阶教程第 25 章:Python CI/CD 与自动化部署

25.1 引言

CI/CD(持续集成/持续交付) 是现代软件开发中不可或缺的一环,能够让你:

  • 自动构建和测试代码
  • 自动部署到服务器/云端
  • 减少人为失误,提升交付速度

本章将介绍:

  • CI/CD 基本流程
  • 使用 GitHub Actions 实现自动构建与测试
  • 使用 Docker 容器化 Python 项目
  • 自动部署示例

25.2 CI/CD 基本流程


CI/CD 包含两个阶段:

阶段

名称

目标

CI

持续集成(Continuous Integration)

自动构建、测试、检查代码质量

CD

持续交付(Continuous Delivery)

自动部署到测试/生产环境

一般流程:

提交代码 → GitHub Actions 触发 → 自动运行测试 → 构建 Docker 镜像 → 部署服务器


25.3 使用 GitHub Actions 自动化构建与测试


25.3.1 基本工作流配置

示例:
.github/workflows/python-ci.yml

name: Python CI

on:
  push:
    branches: [ main ]
  pull_request:

jobs:
  build:
    runs-on: ubuntu-latest

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

      - name: Set up 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 tests
        run: |
          pytest --maxfail=1 --disable-warnings -q

✅ 每次推送代码到 main 分支时,GitHub 会自动运行 pytest 测试。


25.4 使用 Docker 容器化 Python 项目


25.4.1 Dockerfile

示例:

# 基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 安装依赖
COPY requirements.txt .
RUN pip install -r requirements.txt

# 复制项目文件
COPY . .

# 运行应用
CMD ["python", "app.py"]

构建镜像:

docker build -t myapp .

运行:

docker run -p 8000:8000 myapp

✅ 通过容器封装环境,保证本地和线上一致性


25.5 在 CI 中使用 Docker 部署


GitHub Actions 示例:

name: Deploy to Server

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Build Docker image
        run: docker build -t myapp .

      - name: Push image to Docker Hub
        run: |
          echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u ${{ secrets.DOCKER_USERNAME }} --password-stdin
          docker tag myapp mydockerhub/myapp:latest
          docker push mydockerhub/myapp:latest

      - name: SSH Deploy to Server
        uses: appleboy/ssh-action@v0.1.7
        with:
          host: ${{ secrets.SERVER_IP }}
          username: ${{ secrets.SERVER_USER }}
          key: ${{ secrets.SERVER_SSH_KEY }}
          script: |
            docker pull mydockerhub/myapp:latest
            docker stop myapp || true
            docker rm myapp || true
            docker run -d -p 8000:8000 --name myapp mydockerhub/myapp:latest

利用 GitHub Secrets 安全存储账号密码等敏感信息。


25.6 小型自动部署演示流程图


        [ 开发者推送代码 ]
                   │
                   ▼
         ┌──────────────┐
         │ GitHub Actions│
         └──────┬───────┘
                │
        自动测试、构建Docker镜像
                │
                ▼
     [ Docker Hub 镜像仓库 ]
                │
                ▼
        [ 生产服务器自动拉取并运行 ]

✅ 从推送代码到服务上线,全程无需人工干预


25.7 小结

工具/技术

用途

GitHub Actions

自动构建、测试、部署流程

Docker

封装运行环境,保证一致性

pytest

自动运行测试,保障质量

SSH Action

部署代码到远程服务器

✅ 通过 CI/CD,你可以实现自动化测试与部署,极大提升开发效率与发布质量。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
扎的头像 - 鹿快
评论 共1条

请登录后发表评论

    暂无评论内容