0

0

为 ReadmeGenie 实施 CI/CD

霞舞

霞舞

发布时间:2024-11-12 14:15:31

|

1106人浏览过

|

来源于dev.to

转载

为 readmegenie 实施 ci/cd

为什么是持续集成/持续交付?

在我们深入了解设置之前,让我们简要介绍一下为什么 ci/cd 如此重要:

  1. 自动化测试:自动运行测试可确保代​​码在每次更改时保持稳定。
  2. 一致性:ci/cd 在整个代码库中强制执行标准(linting、格式化)。
  3. 可靠性:自动检查和测试最大限度地减少人为错误并提高代码可靠性。
  4. 快速反馈:开发人员会收到有关代码质量的即时反馈,以便及早发现问题。

readmegenie 中,我们利用 github actions 作为我们的 ci/cd 工具。它与 github 存储库顺利集成,并通过 yaml 配置文件提供灵活性和自动化。

readmegenie 的 ci/cd 管道

我们的 ci/cd 管道包括以下自动化步骤:

  1. linting 和格式检查:我们运行 ruffblack 以确保代码风格和一致性。
  2. 单元测试:我们使用单元测试来验证代码更改不会破坏现有功能。
  3. 覆盖率分析:我们使用coverage.py来确保代码在允许提交之前满足我们的覆盖率阈值。
  4. 预提交挂钩:我们添加了挂钩以在推送更改之前强制执行本地质量检查。

github actions 工作流程概述

ci 工作流程在 .github/workflows/python-app.yml 中定义。以下是工作流程每个部分的详细说明:

1. 触发工作流程

工作流程在主分支的每个推送和拉取请求上运行。这可确保所有代码更改在合并到生产环境之前都经过验证。

name: python application

on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]

2. 设置python环境

我们将 github actions 配置为使用 python 3.12.x,确保与本地开发环境的一致性。此步骤安装特定的python版本并准备依赖安装的环境。

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
      - name: set up python 3.12.x
        uses: actions/setup-python@v3
        with:
          python-version: "3.12.x"

3. 安装依赖项

下一步是安装项目依赖项。在这里,我们升级pip并安装requirements.txt文件,它将安装其中指定的附加依赖项。

      - name: install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install flake8 pytest
          if [ -f requirements.txt ]; then pip install -r requirements.txt; fi

4. 运行 linting 和代码质量检查

linting 是我们工作流程的重要组成部分,确保代码符合指定的质量标准。我们运行 flake8,并带有标记语法错误、未定义名称和复杂性问题的选项。

      - name: lint with flake8
        run: |
          # stop the build if there are python syntax errors or undefined names
          flake8 . --count --select=e9,f63,f7,f82 --show-source --statistics
          # exit-zero treats all errors as warnings. the github editor is 127 chars wide
          flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics

5. 通过覆盖率分析运行测试

对于单元测试,我们使用 pytest 来运行所有测试用例。此外,我们使用覆盖率来跟踪测试了哪些代码行,确保我们的测试套件满足定义的 75% 覆盖率阈值。

以下命令运行测试并生成覆盖率报告,突出显示测试覆盖率中的任何差距。这对于质量保证至关重要,因为未经测试的代码是未来错误的潜在来源。

ControlNet
ControlNet

AI图像生成的规则改变者,通过添加额外条件来控制SD模型

下载
      - name: test with pytest
        run: |
          pytest
      - name: test functions and coverage
        run: |
          coverage run --source=. -m unittest discover -s tests
          coverage report -m --fail-under=75

此覆盖率检查通过强制测试覆盖至少 75% 的代码库来确保高标准的代码质量。如果覆盖率低于此阈值,则不允许提交。

集成预提交挂钩

除了 ci/cd 之外,我们还设置了预提交挂钩,以在将任何更改推送到存储库之前在本地强制执行代码质量。这些钩子:

  • 运行 ruff 进行 linting,运行 black 进行格式化。
  • 通过在本地运行具有覆盖率的测试来强制执行最低覆盖率阈值。

以下是我们如何将覆盖率检查添加为 .pre-commit-config.yaml 中的预提交挂钩:

repos:
  - repo: local
    hooks:
      - id: check-coverage
        name: Check Coverage
        entry: bash -c "coverage run --source=. -m unittest discover -s tests && coverage report -m --fail-under=75"
        language: system

挑战和经验教训

设置 ci/cd 需要深入了解不同工具(flake8、pytest、coverage)如何在 github actions 中交互。以下是我们面临的一些挑战以及我们实施的解决方案:

处理不同的本地和远程配置

我们遇到了环境变量冲突的问题,特别是在测试 api 集成和配置处理时。在单元测试中使用@patch.dict和其他模拟技术使我们能够有效地模拟环境。

测试覆盖率和阈值

最大的挑战是确保足够的测试覆盖率。在 github actions 和预提交挂钩中使用带有 --fail-under=75 的coverage.py 有助于执行此标准。

未来的改进

为了使 ci/cd 管道更加强大,我们计划:

  1. 添加部署阶段:测试通过后自动部署到暂存或生产环境。
  2. 自动化代码质量徽章:添加动态徽章以在 readme 中显示覆盖率、linting 状态和测试结果。
  3. 扩大覆盖范围要求:随着我们改进测试并覆盖更多边缘情况,提高覆盖范围阈值。

外卖

通过这个项目,我意识到尽早建立强大的测试和 ci/cd 实践的重要性。如果我重新开始,我会专注于从一开始就编写全面的测试,并随着项目的进展逐步扩展和改进它们。这种方法可以防止丢失分支或未经测试的区域,并确保所有新代码顺利集成到覆盖良好的代码库中。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

339

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

416

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

761

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

349

2025.07.23

github中文官网入口 github中文版官网网页进入
github中文官网入口 github中文版官网网页进入

github中文官网入口https://docs.github.com/zh/get-started,GitHub 是一种基于云的平台,可在其中存储、共享并与他人一起编写代码。 通过将代码存储在GitHub 上的“存储库”中,你可以: “展示或共享”你的工作。 持续“跟踪和管理”对代码的更改。

1077

2026.01.21

PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

42

2025.12.13

C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

8

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

9

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

8

2026.01.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 3.7万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号