Jenkins工作区清理
外观
Jenkins工作区清理[编辑 | 编辑源代码]
Jenkins工作区清理(Workspace Cleanup)是指在Jenkins构建过程中或构建完成后,自动或手动清理工作区(Workspace)中的文件,以确保后续构建不会受到残留文件的干扰。工作区是Jenkins为每个任务分配的一个目录,用于存储源代码、构建产物和临时文件。随着构建次数的增加,工作区可能会积累大量无用文件,占用磁盘空间并可能导致构建失败。
为什么需要工作区清理?[编辑 | 编辑源代码]
- 避免构建污染:残留文件可能导致后续构建结果不一致。
- 节省磁盘空间:清理无用文件可释放存储资源。
- 提高构建可靠性:确保每次构建都从一个干净的环境开始。
清理方式[编辑 | 编辑源代码]
1. 使用内置的“清理工作区”选项[编辑 | 编辑源代码]
在Jenkins任务的配置中,勾选“构建环境”部分的“在构建前删除工作区”或“在构建后删除工作区”选项。
2. 使用“Workspace Cleanup”插件[编辑 | 编辑源代码]
安装插件后,可在构建后操作中选择清理策略:
- 基于模式的清理:仅删除匹配特定模式的文件。
- 保留特定文件:例如保留构建产物。
示例配置[编辑 | 编辑源代码]
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'make'
}
}
}
post {
always {
cleanWs(
deleteDirs: true,
patterns: [[pattern: '*.tmp', type: 'INCLUDE']]
)
}
}
}
3. 手动清理脚本[编辑 | 编辑源代码]
通过Shell或批处理命令直接操作工作区:
Unix/Linux示例[编辑 | 编辑源代码]
#!/bin/bash
# 删除所有.class文件但保留target目录
find . -name "*.class" -delete
Windows示例[编辑 | 编辑源代码]
# 删除所有临时文件
Remove-Item -Path .\* -Include *.tmp,*.bak -Recurse -Force
清理策略对比[编辑 | 编辑源代码]
方式 | 适用场景 | 优点 | 缺点 |
---|---|---|---|
内置选项 | 简单项目 | 无需插件 | 灵活性低 |
插件 | 复杂流水线 | 支持模式匹配 | 需额外安装 |
手动脚本 | 定制需求 | 完全可控 | 维护成本高 |
实际案例[编辑 | 编辑源代码]
场景:多模块Java项目[编辑 | 编辑源代码]
项目结构:
需求:保留最终JAR文件但清理编译中间文件。
解决方案:
post {
success {
cleanWs(
deleteDirs: false,
patterns: [
[pattern: '**/*.class', type: 'INCLUDE'],
[pattern: 'target/**/*.jar', type: 'EXCLUDE']
]
)
}
}
高级技巧[编辑 | 编辑源代码]
- 数学计算磁盘空间:在清理前检查剩余空间
- 条件清理:根据构建状态决定清理范围
post {
failure {
// 失败时保留日志
archiveArtifacts artifacts: '**/logs/*.log'
}
always {
cleanWs(notFailBuild: true)
}
}
注意事项[编辑 | 编辑源代码]
- 清理前确保重要文件已归档(通过
archiveArtifacts
) - 在并行构建中注意工作区锁定问题
- 考虑使用
dir
步骤限定清理范围:
dir('submodule') {
deleteDir()
}
总结[编辑 | 编辑源代码]
Jenkins工作区清理是持续集成的重要实践,通过合理配置可以:
- 保证构建环境一致性
- 优化资源利用率
- 减少人为错误
根据项目复杂度选择适合的清理策略,并始终在流水线中显式声明清理行为。