如何在Jenkins的post阶段检查文件夹是否为空并执行对应操作
Jenkins Post阶段判断目录是否为空并执行对应操作
你的代码存在几个关键问题,导致无法正确实现需求:
- 直接将路径字符串
"${env.BUILD_NUMBER}/**/*"与null比较没有意义,这个字符串永远不会等于null,逻辑永远会进入else分支。 allowEmptyArchive: true会在目录为空时仍生成空归档包,不符合仅非空时归档的需求。- 使用
sudo rm可能带来权限风险,若Jenkins运行用户已有目标目录操作权限,无需使用sudo。
下面是修正后的代码,通过shell命令实际检查目录状态,再执行对应逻辑:
post { always { script { // 检查目标目录是否存在且非空 def dirIsNonEmpty = sh( returnStatus: true, script: "ls -A ${env.BUILD_NUMBER} 2>/dev/null | grep -q ." ) == 0 if (!dirIsNonEmpty) { echo "Nothing to delete" } else { // 归档目录下所有文件(仅非空时执行) archiveArtifacts artifacts: "${env.BUILD_NUMBER}/**/*", fingerprint: true // 删除目录内所有内容(保留目录本身,若要删除目录则去掉/*) sh "rm -rf ${env.BUILD_NUMBER}/*" // 若你的目标目录是SCREENSHOT_DIR,替换为:sh "rm -rf ${SCREENSHOT_DIR}/*" } } } }
关键逻辑说明
ls -A ${env.BUILD_NUMBER} 2>/dev/null:列出目录下所有非隐藏文件(含隐藏文件),2>/dev/null屏蔽目录不存在时的错误输出。grep -q .:静默检查输出是否有内容,有内容返回0(目录非空),无内容返回1(目录为空或不存在)。returnStatus: true:让sh步骤返回命令退出码而非输出,方便用于逻辑判断。- 移除
allowEmptyArchive: true,确保仅当存在文件时才生成归档包。
内容的提问来源于stack exchange,提问作者soccerway
相关产品推荐
相关产品推荐

