FastAPI 项目的持续集成/持续部署 (CI/CD) 技术

426 阅读4分钟

CI/CD 能够帮助开发者自动化完成代码的测试、构建和部署,保证代码质量,缩短交付时间。 以下介绍几种常用的 CI/CD 工具,并结合 FastAPI 项目给出实际例子和代码示例。

核心概念:

  • 持续集成 (CI): 每次代码变更后,自动运行测试,确保没有引入新的错误。
  • 持续部署 (CD): 代码通过测试后,自动部署到服务器,实现快速迭代。

常用 CI/CD 工具

  • GitHub Actions: GitHub 官方提供的 CI/CD 工具,与 GitHub 仓库无缝集成.

    • 优点: 配置简单,免费额度高,适合小型项目和个人开发者。
    • 实际应用: 每次代码 push 到 GitHub 仓库后,自动运行单元测试、代码格式检查,并将 Docker 镜像推送到镜像仓库。
    • 示例 (.github/workflows/main.yml):
    name: FastAPI CI/CD
    
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v3
        - name: Set up Python 3.9
          uses: actions/setup-python@v3
          with:
            python-version: "3.9"
        - name: Install dependencies
          run: |
            python -m pip install --upgrade pip
            pip install -r requirements.txt
        - name: Lint with flake8
          run: |
            pip install flake8
            # 检查代码风格,例如每行最大长度为120
            flake8 . --max-line-length=120
        - name: Test with pytest
          run: |
            pytest
    

    这段代码定义了一个 GitHub Actions 工作流,它会在每次 push 到 main 分支或创建 pull request 时被触发。该工作流首先设置 Python 3.9 环境,然后安装项目依赖,接着使用 flake8 进行代码风格检查,最后使用 pytest 运行单元测试。如果任何一个步骤失败,整个工作流就会失败。

  • Travis CI: 云端 CI 服务,支持多种语言.

    • 优点: 配置简单,支持多种编程语言。
    • 实际应用: 类似于 GitHub Actions,但可以与 GitLab 等其他代码托管平台集成。
  • Jenkins: 开源的 CI/CD 服务器,功能强大,插件丰富.

    • 优点: 高度可定制化,适合大型项目和复杂部署流程。
    • 缺点: 配置相对复杂。
    • 实际应用: 构建复杂的部署流水线,例如先进行代码静态分析、安全扫描,然后进行多环境部署 (开发、测试、生产)。
  • Docker: 容器化技术,用于打包 FastAPI 应用及其依赖.

    • 优点: 保证不同环境一致性,简化部署流程。
    • 实际应用: 将 FastAPI 应用打包成 Docker 镜像,然后使用 Docker Compose 或 Kubernetes 进行部署。
    • 示例 (Dockerfile):
    FROM python:3.9-slim-buster
    
    WORKDIR /app
    
    COPY requirements.txt .
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY . .
    
    CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
    

    这个 Dockerfile 定义了如何构建 FastAPI 应用的 Docker 镜像。它首先基于 Python 3.9 镜像,然后设置工作目录为 /app,接着复制 requirements.txt 文件并安装依赖,然后复制所有项目文件,最后使用 uvicorn 启动 FastAPI 应用。

    • 示例 (docker-compose.yml):
    version: "3.9"
    services:
      web:
        build: .
        ports:
          - "8000:8000"
    

    这个 docker-compose.yml 文件定义了一个简单的 Docker Compose 应用,它包含一个 web 服务,该服务基于当前目录下的 Dockerfile 构建镜像,并将容器的 8000 端口映射到主机的 8000 端口。

  • AWS CodePipeline: AWS 提供的 CI/CD 服务,与 AWS 云服务深度集成.

    • 优点: 与 AWS 生态系统无缝集成,适合在 AWS 上部署的 FastAPI 应用。
    • 实际应用: 自动化构建、测试和部署到 AWS Elastic Beanstalk、ECS、EKS 等服务。

流程示例

一个典型的 FastAPI 项目 CI/CD 流程如下:

  1. 代码提交: 开发者提交代码到代码仓库 (例如 GitHub)。
  2. 触发 CI: 代码仓库触发 CI 工具 (例如 GitHub Actions)。
  3. 构建和测试: CI 工具自动构建 Docker 镜像,运行单元测试、集成测试等。
  4. 镜像推送: 如果测试通过,CI 工具将 Docker 镜像推送到镜像仓库 (例如 Docker Hub、阿里云镜像仓库)。
  5. 触发 CD: 镜像仓库推送事件触发 CD 工具 (例如 Jenkins、AWS CodePipeline)。
  6. 部署: CD 工具从镜像仓库拉取最新的镜像,并部署到服务器 (例如 Kubernetes 集群、AWS ECS)。

总结

选择合适的 CI/CD 工具和平台需要根据项目具体情况进行考虑。 小型项目可以选择配置简单的 GitHub Actions 或 Travis CI,大型项目可以选择功能强大的 Jenkins 或 AWS CodePipeline。 使用 Docker 可以简化部署流程,保证不同环境的一致性。 通过合理的 CI/CD 流程,可以提高开发效率,保证代码质量,缩短交付时间。