温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Jenkins怎样管理构建历史

发布时间:2025-10-30 13:56:56 来源:亿速云 阅读:232 作者:小樊 栏目:编程语言

Jenkins构建历史管理指南

一、构建历史的存储位置

Jenkins中每个Job的构建历史默认存储在$JENKINS_HOME/jobs/<JOB_NAME>/builds/目录下(Linux系统$JENKINS_HOME通常为/var/lib/jenkins或~/.jenkins;Windows系统为C:\Program Files (x86)\Jenkins或用户自定义路径)。该目录下的每个子目录对应一次构建,包含日志、归档制品、状态文件等信息。

二、内置清理机制:Discard Old Builds配置

这是Jenkins官方推荐的核心清理方式,可在Job级别实现时间/数量的双重控制,避免手动逐个删除。
配置步骤:

  1. 进入目标Job的配置页面(Job → Configure);
  2. 找到“General”(或“History”)部分,勾选“Discard old builds”;
  3. 设置清理规则:
    • 保留天数:Days to keep builds(如保留30天内的构建);
    • 保留数量:Max # of builds to keep(如最多保留50个构建);
    • 高级设置(可选):针对归档制品单独设置Days to keep artifacts(保留制品天数)和Max # of artifacts to keep(保留制品数量),避免制品占用过多空间。

进阶用法:通过Groovy脚本定义全局默认策略(适用于所有新Job),或在Pipeline中通过options块设置(覆盖全局配置):

// 全局配置(Manage Jenkins → Configure System → Global Job Defaults)
properties([
    buildDiscarder(logRotator(daysToKeepStr: '7', numToKeepStr: '10'))
])

// Pipeline脚本(声明式)
pipeline {
    agent any
    options {
        buildDiscarder(logRotator(numToKeepStr: '20')) // 保留最近20个构建
    }
    stages { /* ... */ }
}

三、手动清理方式

1. 脚本命令行批量删除

若需批量清理特定Job或所有Job的旧构建,可通过Jenkins“系统管理→脚本命令行”执行Groovy脚本:

  • 删除指定Job的旧构建(保留最近10个):
    def jobName = "your-job-name"
    Jenkins.instance.getItemByFullName(jobName).builds.findAll { it.number <= 10 }.each { it.delete() }
    
  • 删除所有Job的旧构建(保留最近30个):
    Jenkins.instance.items.findAll { it instanceof hudson.model.FreeStyleProject || it instanceof hudson.model.PipelineJob }.each { job ->
        job.builds.findAll { it.number <= 30 }.each { it.delete() }
    }
    

执行后无需重启Jenkins,脚本会自动同步更新构建历史。

2. 清理被删除Job的工作空间

若直接删除Job但未清理其工作空间,会导致磁盘空间浪费。可通过以下Python脚本(需安装jenkinsapi库)遍历节点工作空间,删除无对应Job的目录:

import os
import shutil
from jenkinsapi.jenkins import Jenkins

jenkins_url = "http://your-jenkins-server"
jenkins_user = "username"
jenkins_pass = "password"
workspace_path = "/var/lib/jenkins/workspace/"

jenkins = Jenkins(jenkins_url, username=jenkins_user, password=jenkins_pass)

for dirpath, dirnames, _ in os.walk(workspace_path):
    for dirname in dirnames:
        job_path = os.path.join(dirpath, dirname)
        if not jenkins.has_job(dirname):  # 若Job不存在
            print(f"Deleting workspace for deleted job: {job_path}")
            shutil.rmtree(job_path)

四、插件增强管理

1. Build History Manager插件

提供可视化界面管理构建历史,支持:

  • 按状态(成功/失败/不稳定)筛选构建;
  • 批量删除/保留构建;
  • 导出构建历史为CSV文件;
  • 恢复误删除构建(需提前备份)。
    安装后可通过Job配置页面启用,提升管理效率。

2. Log Parser插件

用于解析构建日志,标记错误/警告信息,帮助快速定位问题构建。结合“Discard old builds”配置,可优先保留包含关键错误的构建,避免重要信息丢失。

五、注意事项

  • 制品分离:若需长期保存构建产物(如JAR包、安装包),建议使用archiveArtifacts步骤归档至Jenkins Master或外部存储(如S3、NFS),而非依赖Job的builds目录。
  • 备份策略:定期备份$JENKINS_HOME目录(尤其是jobs/子目录),避免误删导致历史数据丢失。
  • 权限控制:通过Jenkins“Manage Users→Configure Global Security”设置用户权限,限制普通用户对构建历史的修改/删除操作。
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手