当前位置: 首页 > news >正文

在Linux服务器上使用Jenkins和Poetry实现Python项目自动化

概述

本文将详细介绍如何在Linux服务器上搭建Jenkins环境,集成Python 3.12和Poetry包管理器,实现从Git仓库自动获取代码、安装依赖并执行Python脚本的完整CI/CD流程。

在本地Linux服务器上安装Jenkins软件和Python 3.12,并使用poetry管理Python包,可以安装git插件来获取指定分支最新版本的所有代码,其中包含配置信息文件pyproject.toml,job运行时,可以切换到配置信息文件所在的目录,用poetry install --no-root安装需要的包,再用poetry run python命令行运行python代码文件。

通过本文的详细步骤,你可以在Linux服务器上成功搭建包含Jenkins、Python 3.12和Poetry的完整CI/CD环境。这种配置提供了:

  1. 自动化构建 - 自动从Git获取最新代码
  2. 依赖管理 - 使用Poetry管理Python包依赖
  3. 环境一致性 - 确保开发、测试和生产环境的一致性
  4. 可扩展性 - 支持复杂的构建流程和多环境部署
  5. 监控能力 - 完整的日志和通知机制

环境准备

1. 安装Jenkins

方法一:使用官方仓库安装(推荐)
# 更新系统包
sudo apt update && sudo apt upgrade -y# 安装Java(Jenkins依赖)
sudo apt install openjdk-11-jdk -y# 添加Jenkins官方仓库
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'# 安装Jenkins
sudo apt update
sudo apt install jenkins -y# 启动Jenkins服务
sudo systemctl start jenkins
sudo systemctl enable jenkins# 检查服务状态
sudo systemctl status jenkins
方法二:使用Docker安装
# 创建Jenkins数据目录
sudo mkdir -p /var/jenkins_home
sudo chown 1000:1000 /var/jenkins_home# 运行Jenkins容器
docker run -d \--name jenkins \-p 8080:8080 \-p 50000:50000 \-v /var/jenkins_home:/var/jenkins_home \-v /var/run/docker.sock:/var/run/docker.sock \jenkins/jenkins:lts

2. 初始Jenkins配置

# 获取初始管理员密码
sudo cat /var/lib/jenkins/secrets/initialAdminPassword# 访问Jenkins界面
echo "访问 http://your-server-ip:8080 完成初始设置"

在浏览器中完成:

  • 输入初始管理员密码
  • 安装推荐插件
  • 创建管理员用户

3. 安装Python 3.12

# 安装编译依赖
sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev libsqlite3-dev wget libbz2-dev -y# 下载Python 3.12源码
cd /tmp
wget https://www.python.org/ftp/python/3.12.0/Python-3.12.0.tgz
tar -xf Python-3.12.0.tgz# 编译安装
cd Python-3.12.0
./configure --enable-optimizations --prefix=/usr/local/python3.12
make -j $(nproc)
sudo make altinstall# 创建符号链接
sudo ln -sf /usr/local/python3.12/bin/python3.12 /usr/local/bin/python3.12
sudo ln -sf /usr/local/python3.12/bin/pip3.12 /usr/local/bin/pip3.12# 验证安装
python3.12 --version
pip3.12 --version

4. 安装和配置Poetry

# 使用官方脚本安装
curl -sSL https://install.python-poetry.org | python3.12 -# 添加到PATH(根据提示修改对应的shell配置文件)
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc# 配置Poetry不创建虚拟环境(可选,根据需求)
poetry config virtualenvs.create false# 验证安装
poetry --version

Jenkins插件安装和配置

1. 安装必要插件

在Jenkins管理界面安装以下插件:

  • Git Plugin - Git集成
  • Pipeline - 管道支持
  • Credentials Binding - 凭据管理
  • SSH Agent - SSH密钥管理

2. 配置全局工具

进入 Manage JenkinsGlobal Tool Configuration

配置Python 3.12
  • Name: python-3.12
  • Installation directory: /usr/local/python3.12
配置Poetry
  • Name: poetry
  • Installation directory: $HOME/.local/bin

3. 配置Git凭据

进入 Manage JenkinsManage Credentials

  • 添加SSH密钥或用户名/密码凭据用于访问Git仓库

项目配置

1. 创建Jenkins Job

自由风格项目配置
# 在Jenkins界面创建新的"自由风格软件项目"
# 配置如下:

源码管理部分:

  • Git Repository: your-git-repository-url
  • Branches to build: */your-branch-name
  • Credentials: 选择配置好的Git凭据

构建环境:

  • ✅ Use secret texts or files
  • ✅ Add timestamps to the Console Output

构建步骤 - Execute shell:

#!/bin/bash# 切换到项目目录(根据实际结构调整)
cd path/to/your/project# 安装依赖(不安装根包)
poetry install --no-root# 运行Python脚本
poetry run python your_script.py# 或者运行测试
poetry run pytest tests/# 或者运行其他命令
poetry run python -m your_module

2. 使用Jenkinsfile(推荐)

在项目根目录创建Jenkinsfile

pipeline {agent anytools {python "python-3.12"}environment {POETRY_HOME = '/home/jenkins/.local/bin'PATH = "$POETRY_HOME:$PATH"}stages {stage('Checkout') {steps {git branch: 'main', credentialsId: 'your-git-credentials', url: 'your-git-repository-url'}}stage('Install Dependencies') {steps {dir('path/to/your/project') {sh '''poetry install --no-root --no-interaction'''}}}stage('Run Script') {steps {dir('path/to/your/project') {sh '''poetry run python your_script.py'''}}}stage('Run Tests') {steps {dir('path/to/your/project') {sh '''poetry run pytest tests/ -v'''}}}}post {always {cleanWs()}success {emailext (subject: "SUCCESS: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",body: "项目构建成功!\n详情: ${env.BUILD_URL}",to: "team@example.com")}failure {emailext (subject: "FAILED: Job '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",body: "项目构建失败!\n详情: ${env.BUILD_URL}",to: "team@example.com")}}
}

项目结构示例

假设你的项目结构如下:

your-project/
├── Jenkinsfile
├── pyproject.toml
├── poetry.lock
├── src/
│   └── your_package/
│       ├── __init__.py
│       └── main.py
├── tests/
│   └── test_main.py
└── scripts/└── deploy.sh

对应的pyproject.toml示例:

[tool.poetry]
name = "your-project"
version = "0.1.0"
description = "Your project description"
authors = ["Your Name <your.email@example.com>"][tool.poetry.dependencies]
python = "^3.12"
requests = "^2.31.0"
pandas = "^2.1.0"[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
black = "^23.0.0"
flake8 = "^6.0.0"[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"[tool.poetry.scripts]
your-script = "your_package.main:main"

高级配置

1. 使用Docker容器

pipeline {agent {docker {image 'python:3.12-slim'args '-v $HOME/.cache/pip:/root/.cache/pip'}}stages {stage('Setup') {steps {sh '''curl -sSL https://install.python-poetry.org | python3 -export PATH="/root/.local/bin:$PATH"'''}}// ... 其他阶段}
}

2. 多分支管道

pipeline {agent anyparameters {choice(name: 'BRANCH',choices: ['main', 'develop', 'feature/*'],description: '选择要构建的分支')}stages {stage('Multi-Branch Build') {steps {script {if (env.BRANCH_NAME == 'main') {// 生产环境构建步骤sh 'poetry install --only main'} else if (env.BRANCH_NAME == 'develop') {// 开发环境构建步骤sh 'poetry install --with dev'} else {// 特性分支构建步骤sh 'poetry install --with dev,test'}}}}}
}

3. 缓存优化

pipeline {agent anyoptions {skipDefaultCheckout true}stages {stage('Checkout & Cache') {steps {checkout scmdir('path/to/your/project') {// 缓存poetry虚拟环境cache(includes: '**/poetry.lock',excludes: '',path: '${WORKSPACE}/.cache/poetry') {sh 'poetry install --no-root --no-interaction'}}}}}
}

故障排除

常见问题及解决方案

  1. Poetry命令未找到

    # 在Jenkins系统配置中添加PATH
    export PATH="$HOME/.local/bin:$PATH"
    
  2. Python版本不匹配

    // 在Jenkinsfile中明确指定Python路径
    environment {PYTHONPATH = '/usr/local/python3.12/bin'
    }
    
  3. 权限问题

    # 确保Jenkins用户有相应目录的访问权限
    sudo chown -R jenkins:jenkins /path/to/project
    
  4. 依赖安装失败

    # 清理缓存并重试
    poetry cache clear --all pypi
    poetry install --no-root
    

调试技巧

stage('Debug') {steps {sh '''echo "当前目录: $(pwd)"echo "Python版本: $(python3.12 --version)"echo "Poetry版本: $(poetry --version)"echo "PATH: $PATH"ls -la'''}
}

监控和维护

1. 日志管理

# 查看Jenkins日志
sudo tail -f /var/log/jenkins/jenkins.log# 查看构建日志
ls /var/lib/jenkins/jobs/your-job-name/builds/

2. 定期维护

# 清理旧的构建记录
# 在Jenkins job配置中设置"丢弃旧的构建"# 更新Poetry
poetry self update# 更新依赖
poetry update
http://www.dtcms.com/a/490600.html

相关文章:

  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段-二阶段(3):文法運用
  • [Sora] 数据管理 | `group_by_bucket`智能分桶 | DataloaderForVideo数据传输
  • 反向代理原理和服务转发实现方式
  • 中山企业网站多少钱爱奇艺做视频网站的
  • mapper.xml sql动态表查询配置
  • SQL Server 2019实验 │ 设计数据库的完整性
  • Leetcode每日一练--35
  • IDEA项目上传Gitee
  • 数据同步:Debezium监听,变更捕获实现?
  • 免费在线自助建站嵩明县住房和城乡建设局网站
  • PyTorch是什么?
  • 11年始终专注营销型网站龙岗召开企业服务大会
  • 11-触发器
  • dify 配置域名https访问
  • Fragment mWho 在registerForActivityResult 中作用
  • 告别插件堆砌!Neovim 配置“瘦身”实战:用 Mini.nvim 替换主流插件全过程
  • PyCharm 2025:最新使用图文教程!
  • 线性表之数组
  • 黄岩网站建设兼职无锡网站建设网络推广
  • 专业的食品行业网站开发叮当快药网站谁做的
  • Agent 时代的大模型演化:从 ChatGPT 到多智能体协作系统
  • uniapp uni.chooseImage+uni.uploadFile使用方法与详解
  • 云手机的魅力与优势
  • 关于 uni-app 与原生微信小程序中的生命周期 —— 一次“生命旅程”的解读
  • 方圆网通网站建设公司怎么做不用数据库的网站
  • uniapp 打开横竖屏。usb调试时可以横竖屏切换,但是打包发布后却不行?
  • 有些网站开发人员工具无反应老闵行小学排名
  • Ubuntu20.04安装Anbox安卓模拟器
  • aspx php哪个做门户网站好万秀服务不错的seo推广
  • 回文串问题