温馨提示×

Python在Debian上如何配置持续集成

小樊
37
2025-12-09 01:50:02
栏目: 编程语言

在 Debian 上配置 Python 持续集成

一 环境准备

  • 更新系统并安装基础工具:
    • 执行:sudo apt update && sudo apt upgrade -y
    • 安装:sudo apt install -y git python3 python3-pip build-essential
  • 建议启用 Python 虚拟环境 隔离依赖:
    • 执行:python3 -m venv .venv && source .venv/bin/activate
    • 升级 pip:python -m pip install --upgrade pip
  • 可选:安装 Docker 以获得一致的构建与运行环境:
    • 执行:sudo apt install -y docker.io && sudo systemctl enable --now docker
  • 说明:上述基础环境为后续 Jenkins、本地脚本或容器化 CI 提供支撑。

二 方案一 Jenkins 自建 CI 服务器

  • 安装 Jenkins(需要 Java 11):
    • 执行:sudo apt install -y openjdk-11-jdk
    • 导入密钥与源并安装:
      • wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
      • echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
      • sudo apt update && sudo apt install -y jenkins
    • 启动服务:sudo systemctl start jenkins && sudo systemctl enable jenkins
    • 访问控制台:打开浏览器进入 http://<服务器IP>:8080,按向导完成解锁与插件安装(推荐安装 GitPipeline 等常用插件)。
  • 创建流水线任务(Pipeline):
    • 在 Jenkins 中新建 Pipeline 任务,选择 “Pipeline script from SCM”,SCM 选 Git,填写仓库地址与凭证,指定 Jenkinsfile 路径。
  • 示例 Jenkinsfile(可直接使用并扩展):
    pipeline {
      agent any
      environment {
        PYTHON = 'python3'
      }
      stages {
        stage('Checkout') {
          steps { git url: 'https://github.com/your-org/your-python-app.git', branch: 'main' }
        }
        stage('Setup') {
          steps {
            sh '''
              python3 -m venv .venv
              . .venv/bin/activate
              pip install --upgrade pip
              pip install -r requirements.txt
            '''
          }
        }
        stage('Lint') {
          steps {
            sh '''
              . .venv/bin/activate
              pip install -U flake8
              flake8 src tests
            '''
          }
        }
        stage('Test') {
          steps {
            sh '''
              . .venv/bin/activate
              pip install -U pytest pytest-cov
              pytest --junitxml=reports/pytest.xml --cov=src --cov-report=xml:reports/coverage.xml
            '''
          }
        }
      }
      post {
        always {
          junit 'reports/*.xml'
          cleanWs()
        }
      }
    }
    
    • 要点:
      • 使用 venv 隔离依赖,避免污染系统 Python。
      • post 阶段归档测试报告,便于在 Jenkins 中查看趋势与结果。

三 方案二 GitHub Actions 云端 CI

  • 适用场景:代码托管在 GitHub,无需自建服务器。
  • 在项目根目录创建 .github/workflows/ci.yml
    name: Python CI
    
    on:
      push:
        branches: [ main ]
      pull_request:
        branches: [ main ]
    
    jobs:
      build:
        runs-on: ubuntu-latest
        steps:
          - uses: actions/checkout@v4
    
          - name: Set up Python
            uses: actions/setup-python@v5
            with:
              python-version: '3.11'
    
          - name: Install dependencies
            run: |
              python -m pip install --upgrade pip
              pip install -r requirements.txt
              pip install -U pytest pytest-cov
    
          - name: Lint
            run: |
              pip install -U flake8
              flake8 src tests
    
          - name: Test
            run: |
              pytest --junitxml=reports/pytest.xml --cov=src --cov-report=xml:reports/coverage.xml
    
          - name: Upload coverage
            uses: codecov/codecov-action@v4
            with:
              token: ${{ secrets.CODECOV_TOKEN }}  # 可选
    
  • 说明:
    • 使用官方的 actions/setup-python 设置指定 Python 版本,在云端完成构建、测试与报告归档。

四 关键实践与排错要点

  • 依赖与缓存:
    • 使用 requirements.txtpyproject.toml 管理依赖;在 CI 中对 pip 与缓存目录(如 ~/.cache/pip)进行缓存,可显著加速构建。
  • 虚拟环境与权限:
    • 始终在 venv 中安装依赖;在 Jenkins 中若使用 Docker 或需要访问系统资源,注意 jenkins 用户的权限与 sudo 策略,避免以 root 运行构建步骤。
  • 报告与质量门禁:
    • 统一输出 JUnit XML覆盖率 XML,在 Jenkins 中归档并配置质量门禁;结合 flake8/ruffpytestcoverage 形成“代码规范—单元测试—覆盖率”闭环。
  • 多 Python 版本矩阵:
    • 在 GitHub Actions 中使用 strategy.matrix 构建多个 Python 版本;在 Jenkins 可通过多 agent 或多 stage 并行覆盖版本矩阵。
  • 安全与合规:
    • Secrets 存入 CI 平台凭据存储,避免明文;定期升级依赖并启用 Dependabot 或类似机制。

0