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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:06:22