当前位置:

首页 > 编程开发 > CentOS Python持续集成怎么做

CentOS Python持续集成怎么做

CentOS 上搭建 Python 持续集成 一 方案总览与选型 在 CentOS 上为 Python 项目搭建 CI/CD 流水线,通常有几个主流选项:自建 Jenkins、使用 GitLab CI/CD,或者采用 GitHub Actions。每种方案都有其适用场景,但核心流程万变不离其宗:拉取

本文目录

    CentOS 上搭建 Python 持续集成

    CentOS Python持续集成怎么做

    一 方案总览与选型

    在 CentOS 上为 Python 项目搭建 CI/CD 流水线,通常有几个主流选项:自建 Jenkins、使用 GitLab CI/CD,或者采用 GitHub Actions。每种方案都有其适用场景,但核心流程万变不离其宗:拉取代码、准备环境、安装依赖、运行测试、通过质量门禁,最后完成打包与发布。

    具体怎么选?Jenkins 以其高度的灵活性和强大的插件生态著称,尤其在 CentOS 上部署成熟,非常适合企业内网环境和需要深度定制的复杂流水线。而 GitLab CI 和 GitHub Actions 则主打声明式配置,用 YAML 文件就能搞定,上手速度快,与各自的代码托管平台无缝集成。值得注意的是,GitHub Actions 的托管 Runner 默认是 Ubuntu 环境,如果坚持要在 CentOS 上运行,就需要使用自托管的 Runner。

    二 方案一 Jenkins 在 CentOS 自建

    选择 Jenkins,意味着你获得了最大的控制权。下面来看看如何在 CentOS 上一步步把它跑起来。

    准备环境

    首先,得把基础环境搭好。Jenkins 本身依赖 Ja va 运行,所以需要先安装 Ja va 8 或 11。同时,Git 和 Python 3 也是必需品。为了环境隔离,强烈建议使用 Python 的 venv 模块。命令很简单:

    sudo yum install -y ja va-1.8.0-openjdk git
    python3 -m venv .venv && source .venv/bin/activate

    安装与启动 Jenkins

    推荐通过官方 RPM 仓库安装,这样后续管理升级都方便。依次执行以下命令:

    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat/jenkins-ci.org.key
    sudo yum install -y jenkins
    sudo systemctl start jenkins

    启动后,在浏览器访问 http://<你的服务器IP>:8080 就能看到 Jenkins 的初始化页面了。

    初始化与插件

    完成解锁和初始管理员账户设置后,会进入插件安装界面。安装“建议的插件”是个不错的开始。对于 Python 项目,有几个插件尤其关键:Git plugin(代码拉取)、Pipeline(定义流水线)、Python Plugin(提供 Python 相关工具)、Warnings Next Generation(收集代码检查警告)。如果需要更炫酷的测试报告,Allure 插件值得考虑。

    创建任务与流水线

    新建一个“Pipeline”类型的任务。在配置中,指定你的代码仓库地址和分支。更优雅的做法是,将流水线定义写在项目根目录的 Jenkinsfile 中,这样 Jenkins 只需从 SCM 读取并执行即可,实现了“流水线即代码”。

    触发与 Webhook

    触发构建的方式有两种。一种是让 Jenkins 定期轮询(Poll SCM)仓库,但这会有延迟。更高效的方式是配置 Webhook:在你的 GitLab 或 Gitee 仓库中,设置推送事件时,自动触发 Jenkins 项目的构建 URL(需要在 Jenkins 项目中生成一个带 Token 的 Webhook 地址)。

    质量与报告

    CI 的价值不仅在于自动化,更在于反馈。在 Jenkins 任务的“构建后操作”中,可以添加步骤来收集和展示报告。例如,解析 pytest 生成的 JUnit XML 格式报告,集成 pylint 的警告,或者展示 Allure 生成的精美测试报告看板。

    部署示例

    流水线的最后一步通常是部署。对于 Python 库或应用,可以使用 setup.py 打包:python setup.py sdist bdist_wheel。部署时,可以通过 scp 或 rsync 将打包好的 wheel 文件上传到生产服务器,然后远程执行 pip install。更复杂的场景,可以结合 SSH 编写滚动升级和回滚脚本。

    三 方案二 GitLab CI 或 GitHub Actions

    如果你的代码已经托管在 GitLab 或 GitHub,那么使用平台原生的 CI/CD 服务往往是更轻量、更直接的选择。

    GitLab CI(仓库内 .gitlab-ci.yml)

    一切配置都在项目根目录的 .gitlab-ci.yml 文件中。你需要定义 stages(例如 build, test, deploy),并为每个 stage 指定 runner 和执行脚本。Runner 可以使用官方的 python:3.x Docker 镜像,也可以使用自定义的 CentOS 镜像。测试阶段运行 pytest,质量门禁可以集成 pylint 或 flake8。部署阶段则可以使用 scp、rsync 或 SSH 命令将产物发布到目标机器。

    GitHub Actions(.github/workflows/ci.yml)

    思路与 GitLab CI 类似,配置文件放在 .github/workflows/ 目录下。默认情况下,GitHub 会使用托管的 ubuntu-latest Runner 来执行你的工作流。如果必须使用 CentOS 环境,就需要在 CentOS 服务器上配置 self-hosted runner 并注册到你的仓库。流程通常包括:检出代码、设置 Python 环境、安装依赖、运行测试,最后根据条件触发部署。

    适用场景

    一句话总结:当你的代码托管在 GitLab 或 GitHub,并且希望快速落地 CI/CD 时,优先考虑它们原生的方案。但是,如果你的测试需要在 CentOS 上运行(例如涉及特定的系统库或 UI 测试),或者需要访问内网资源,那么配置一个自托管的 Runner 会是更稳妥的选择。

    四 关键实践与常见问题

    掌握了工具,还得知道怎么用好。下面这些实践要点,能帮你避开不少坑。

    环境与依赖

    切记,一定要在虚拟环境中运行你的项目!每次构建都使用 python -m venv .venv 创建一个干净的环境。为了加速构建,可以缓存 pip 下载的包(例如缓存 ~/.cache/pip 目录)。这样做能严格区分系统 Python 和项目 Python,避免依赖污染。

    测试与质量

    测试框架推荐 pytest,结构清晰插件丰富。结合 pytest-cov 可以生成代码覆盖率报告。静态代码检查(如 pylint, flake8)应该设定一个质量阈值,不达标就令构建失败,把问题扼杀在早期。如果涉及 UI 自动化,Selenium 或 Playwright 是常见选择,测试报告可以集成 Allure 来提升可读性。

    触发策略

    对于内网或自建平台,优先使用 Webhook 实现代码推送后实时触发。对于公网托管平台,配置在 push 或 pull request 事件时触发构建,通常就足够了。在一些特殊场景下,可以保留定时轮询作为兜底机制。

    报告与可视化

    无论是 Jenkins 还是 GitLab CI,都要善用报告可视化功能。集成 JUnit XML 报告来追踪测试通过率,收集代码检查警告来分析质量趋势,使用 Allure 报告来直观展示测试用例详情。这些是构建质量看板的基础。

    安全与网络

    安全无小事。用于部署的 SSH 私钥必须妥善管理,放在 Jenkins 的 Credentials 或 GitLab 的 CI/CD Variables 中,切勿硬编码在脚本里。配置 Webhook 时,要确保 GitLab 服务器能访问到 Jenkins 的回调地址(涉及内网穿透或防火墙规则)。遵循最小权限原则,为 Runner 和部署账号配置刚好够用的权限。

    资源与性能

    Jenkins 作为常驻服务,内存占用不低,建议服务器至少配备 1GB 内存。对于大型项目,合理设置 Jenkins 的并发构建数,并在测试时使用像 pytest-xdist 这样的插件进行测试分片,可以显著提升流水线执行速度。

    五 最小可用示例

    理论说了这么多,来看两个“开箱即用”的配置示例。

    Jenkinsfile(声明式流水线)

    这个示例展示了一个完整的声明式流水线:拉取代码、准备 Python 虚拟环境、安装依赖、运行测试与质量检查、打包,并且仅在 main 分支执行部署。

    pipeline {
        agent any
        environment {
            PYTHON = 'python3'
            VENV= '.venv'
        }
        stages {
            stage('Checkout') {
                steps {
                    git branch: 'main', url: 'git@your-gitlab.com:group/project.git'
                }
            }
            stage('Setup') {
                steps {
                    sh '''
                        ${PYTHON} -m venv ${VENV}
                        . ${VENV}/bin/activate
                        pip install --upgrade pip
                        pip install -r requirements.txt
                    '''
                }
            }
            stage('Test & Quality') {
                steps {
                    sh '''
                        . ${VENV}/bin/activate
                        pytest --junitxml=reports/pytest.xml --maxfail=1
                        pylint --output-format=parseable src/ || true
                    '''
                }
                post {
                    always {
                        junit 'reports/pytest.xml'
                        warnings canComputeNew: false, defaultEncoding: '', excludePattern: '', healthy: '', includePattern: '**/pylint*.xml', messagesPattern: '', parserConfigurations: [[parserName: 'PyLint', pattern: '**/pylint*.xml']], unHealthy: ''
                    }
                }
            }
            stage('Package') {
                steps {
                    sh '''
                        . ${VENV}/bin/activate
                        python setup.py sdist bdist_wheel
                    '''
                }
            }
            stage('Deploy') {
                when { branch 'main' }
                steps {
                    sh '''
                        . ${VENV}/bin/activate
                        pip install scp
                        python - <<'PY'
    import os, scp, paramiko
    src=os.path.expanduser("dist/*.whl")
    dst="/opt/pkgs/"
    key=paramiko.RSAKey.from_private_key_file("/var/lib/jenkins/.ssh/id_rsa")
    with paramiko.SSHClient() as c:
        c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        c.connect("prod.example.com", username="deploy", pkey=key)
        with scp.SCPClient(c.get_transport()) as s:
            s.put(src, dst)
    PY
                        ssh deploy@prod.example.com "pip install /opt/pkgs/*.whl && systemctl restart myapp"
                    '''
                }
            }
        }
    }

    .gitlab-ci.yml(GitLab CI 示例)

    这是一个对应的 GitLab CI 配置示例,使用官方 Python 镜像,同样包含构建、测试、部署三个阶段,并且部署仅针对 main 分支。

    stages:
      - build
      - test
      - deploy
    
    variables:
      PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
    
    cache:
      paths:
        - .cache/pip
        - .venv
    
    build:
      stage: build
      image: python:3.11
      script:
        - python -m venv .venv
        - . .venv/bin/activate
        - pip install --upgrade pip
        - pip install -r requirements.txt
        - python setup.py sdist bdist_wheel
    
    test:
      stage: test
      image: python:3.11
      script:
        - . .venv/bin/activate
        - pytest --junitxml=reports/pytest.xml --maxfail=1
        - pylint --output-format=parseable src/ || true
      artifacts:
        when: always
        reports:
          junit: reports/pytest.xml
    
    deploy:
      stage: deploy
      image: python:3.11
      script:
        - . .venv/bin/activate
        - pip install scp
        - python - <<'PY'
    import os, scp, paramiko
    src=os.path.expanduser("dist/*.whl")
    dst="/opt/pkgs/"
    key=paramiko.RSAKey.from_private_key_file("/builds/.ssh/id_rsa")
    with paramiko.SSHClient() as c:
        c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        c.connect("prod.example.com", username="deploy", pkey=key)
        with scp.SCPClient(c.get_transport()) as s:
            s.put(src, dst)
    PY
        - ssh deploy@prod.example.com "pip install /opt/pkgs/*.whl && systemctl restart myapp"
      only:
        - main
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 CentOS
    相关文章 更多
    CentOS 7在VMware中的完整安装与验证指南
    CentOS 7在VMware中的完整安装与验证指南

    本文详细讲解如何在VMware Workstation中从零开始安装CentOS 7虚拟机。内容涵盖ISO镜像准备、典型配置创建、硬件参数分配(磁盘与内存)、安装器操作及首次启动后的版本与网络验证。通过规范化的步骤指引,帮助读者快速搭建稳定可用的Linux学习环境,并解决常见的启动与网络故障。

    CentOS
    CentOS

    Linux系统管理员密码的终极恢复方案:详解救援模式 在服务器运维的世界里,Linux系统的霸主地位毋庸置疑。不过,无论是资深管理员还是新手,都可能遇到一个尴尬又紧急的状况:系统管理员密码意外丢失。别慌,一个强大却常被忽视的内置“后门”——系统救援模式——就能派上用场。它不仅能重设密码,更像是系统故

    Python依赖库在CentOS中如何管理
    Python依赖库在CentOS中如何管理

    在CentOS系统上管理Python依赖库需先更新系统并安装Python3、pip及开发工具。安装方式包括pip(推荐)、yum/dnf(系统级)和conda。通过虚拟环境隔离依赖、用requirements.txt记录版本可避免冲突。卸载通过pip或yum/dnf完成。常见问题涉及权限、缺失系统依赖及版本兼容性。

    Java在CentOS上编译时出现乱码怎么办
    Java在CentOS上编译时出现乱码怎么办

    在CentOS编译Java乱码时,需检查系统编码设为UTF-8,编译用-encodingUTF-8,运行设-Dfile.encoding=UTF-8,确保源文件编码一致,调整IDE编码,中文显示异常则安装中文字体。

    如何提升CentOS Java编译性能
    如何提升CentOS Java编译性能

    通过升级JDK版本、启用增量编译与并行编译、优化JVM参数、利用构建工具高级特性、改进代码结构、进行系统级调优及持续监控分析,可显著提升CentOS环境下Java编译性能,减少重复编译,优化内存使用,从而缩短构建时间,提高开发效率。

    Java在CentOS上编译失败的原因
    Java在CentOS上编译失败的原因

    在CentOS上编译Java程序时,需安装JDK并正确设置JAVA_HOME环境变量,通过命令查找安装路径并配置到~/.bashrc或/etc/profile中。同时关注编译器错误消息,修复代码语法或逻辑错误,确保Maven或Gradle等构建工具正确安装配置。

    CentOS编译Golang时遇到问题怎么办
    CentOS编译Golang时遇到问题怎么办

    在CentOS上编译Golang程序,常见问题包括环境变量配置错误、依赖包管理混乱、glibc版本不兼容、编译器工具链缺失、代码或缓存异常、Go版本不匹配及权限不足,可通过逐一排查对应方法解决。

    在CentOS上如何顺利编译Golang
    在CentOS上如何顺利编译Golang

    在CentOS上编译Golang:先安装开发工具包、wget和git;下载Go源码压缩包并解压至/usr/local;配置GOROOT和PATH环境变量(如添加至~/.bashrc),执行source生效;运行goversion验证安装成功。

    怎样提升CentOS上Golang编译速度
    怎样提升CentOS上Golang编译速度

    在CentOS上提升Golang编译速度,可通过优化编译选项(如并行编译、去除调试信息)、将缓存目录指向SSD并定期清理,拆分代码为小包、消除循环依赖、使用vendor本地依赖,升级多核CPU、16GB以上内存和SSD,以及设置GOPROXY、采用PGO优化、升级Go版本等方式实现。

    CentOS编译Golang需要注意什么
    CentOS编译Golang需要注意什么

    在CentOS编译Go程序时,需正确配置GOROOT、GOPATH等环境变量,使用GoModules管理依赖,注意Glibc版本兼容性,根据需求设置CGO_ENABLED=0实现静态链接,合理配置交叉编译参数,优化二进制文件大小,解决权限问题,并确保Go版本与项目要求一致。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。