如何编写每周定时执行的bash脚本清理Jenkins agent堆积的构建工作区
Jenkins Agent 工作区定时清理方案
核心逻辑
解决清理任务删除自身工作区的核心是利用Jenkins自动注入的WORKSPACE环境变量获取当前任务的工作区路径,执行清理操作时主动排除该路径即可。
具体实现步骤
1. 编写清理bash脚本
可直接使用以下脚本,按需修改开头的配置项即可:
#!/bin/bash # 配置项:请根据实际环境修改 JENKINS_WORKSPACE_ROOT="/home/jenkins/agent/workspace" # Agent上工作区的根目录 RETENTION_DAYS=7 # 工作区最长保留天数,仅清理超过该天数未修改的目录 EXCLUDE_WORKSPACE="$WORKSPACE" # 自动读取当前清理任务的工作区,无需手动修改 # 前置校验 if [ ! -d "${JENKINS_WORKSPACE_ROOT}" ]; then echo "ERROR: 工作区根目录 ${JENKINS_WORKSPACE_ROOT} 不存在,退出执行" exit 1 fi # 试运行模式:首次执行建议先打开以下命令,确认待删除目录符合预期后再关闭、开启删除命令 # find "${JENKINS_WORKSPACE_ROOT}" -maxdepth 1 -type d -not -path "${EXCLUDE_WORKSPACE}" -mtime +${RETENTION_DAYS} -exec echo "待删除目录:{}" \; # 正式删除命令 find "${JENKINS_WORKSPACE_ROOT}" -maxdepth 1 -type d \ -not -path "${EXCLUDE_WORKSPACE}" \ -mtime +${RETENTION_DAYS} \ -exec rm -rf {} \; echo "清理执行完成,已跳过当前任务工作区:${EXCLUDE_WORKSPACE}"
注意:-maxdepth 1参数限定仅清理工作区根目录下的一级项目目录,避免误删项目内部的嵌套子目录
2. 配置定时运行规则
在Jenkins中新建自由风格任务,按以下配置:
- 任务绑定到需要清理的目标Agent节点
- 构建触发器选择「定期构建」,Cron表达式按需设置,比如每周日凌晨2点运行填
0 2 * * 0 - 构建步骤选择「执行shell」,粘贴上述修改好配置的脚本即可
可选优化
如果需要清理多个工作区根目录,只需在脚本中新增配置项后循环处理即可;如果需要仅清理特定前缀的工作区,可在find命令中添加-name "xxx_*"过滤规则。
内容的提问来源于stack exchange,提问作者karym
相关产品推荐
相关产品推荐

