You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写每周定时执行的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:27:06