如何在Jenkins中将自定义日期命名文件夹与构建关联并随构建删除?
实现构建删除时自动关联删除日期文件夹
当然可以做到!这在Jenkins场景里是很常见的需求,我给你整理了两种实用的方案,你可以根据自己的配置情况选择:
方案一:用构建变量记录路径 + 构建删除钩子脚本
这种方案适合你需要将文件夹存放在自定义路径(而非Jenkins默认工作区)的场景:
在构建步骤中记录文件夹路径到构建属性
在你的「execute shell」步骤里,除了创建文件夹,还要把路径持久化到构建的描述中,方便后续删除脚本读取:# 生成带时间戳的日期文件夹名称,比如20240520_143022 DATE_FOLDER=$(date +%Y%m%d_%H%M%S) # 假设你把文件夹创建在自定义存储目录,比如/opt/jenkins/build_archives/ FOLDER_PATH="/opt/jenkins/build_archives/${DATE_FOLDER}" mkdir -p "${FOLDER_PATH}" # 将路径写入临时文件,供后续步骤设置构建描述 echo "关联文件夹:${FOLDER_PATH}" > "${WORKSPACE}/build_assoc.txt"接着添加一个「Set build description」步骤,读取
build_assoc.txt里的内容作为构建描述,这样每个构建的详情页里就会显示对应的文件夹路径了。添加构建删除时的执行脚本
先安装「Post-build Script Plugin」(如果还没装),然后在任务的「构建后操作」里添加「Execute a set of scripts」,选择「When deleting a build」作为触发时机,写入删除脚本:# 从构建描述中提取关联的文件夹路径 FOLDER_PATH=$(echo "${BUILD_DESCRIPTION}" | grep -oP '关联文件夹:\K.*') # 路径存在则执行删除 if [ -d "${FOLDER_PATH}" ]; then rm -rf "${FOLDER_PATH}" echo "已成功删除关联文件夹:${FOLDER_PATH}" else echo "关联文件夹不存在,跳过删除:${FOLDER_PATH}" fi
方案二:将文件夹与构建工作区绑定(更简易)
如果你的自定义工作区允许为每个构建分配独立子目录,那可以直接把日期文件夹纳入构建工作区,借助Jenkins原生功能实现联动删除:
- 在任务配置的「高级项目选项」里,勾选「Use custom workspace」,设置路径为类似:
/opt/jenkins/custom_workspace/${JOB_NAME}/${BUILD_NUMBER}_$(date +%Y%m%d_%H%M%S) - 这样每个构建都会拥有独立的工作区(也就是你的日期文件夹所在目录),接着在「Discard Old Builds」的高级设置里,勾选「Delete workspace when build is discarded」,以后删除构建时,Jenkins会自动删除对应的工作区目录。
注意事项
- 确保Jenkins运行用户对文件夹所在目录有完整的读写和删除权限
- 用方案一时,要注意构建描述的格式不要被其他内容干扰,避免脚本提取路径出错
- 测试阶段可以先手动删除一个测试构建,检查对应的文件夹是否被正确删除
内容的提问来源于stack exchange,提问作者Morse
相关产品推荐
相关产品推荐

