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

如何在Jenkins声明式流水线中递归归档产物并排除指定子目录

Jenkins声明式流水线动态归档文件方案

核心逻辑是依托Jenkins内置的Ant风格路径匹配规则,无需硬编码动态的<BUILD_NAME>目录名即可实现过滤归档。

最高效实现方式

直接使用archiveArtifacts步骤的路径匹配+排除规则即可,无需额外执行命令获取动态目录名:

pipeline {
    agent any
    // 你的其他流水线配置
    stages {
        // 原有构建阶段,此处省略
    }
    post {
        always {
            // 核心归档逻辑
            archiveArtifacts artifacts: 'out/*/*', excludes: 'out/*/build/**', fingerprint: true
        }
    }
}

参数说明

  • artifacts: 'out/*/*':*通配符匹配out目录下任意一级子目录(即动态的<BUILD_NAME>目录),末尾的*匹配该目录下所有直接独立文件,不会匹配子目录内的内容;如果需要归档<BUILD_NAME>下除build之外其他子目录的内容,可以把该参数改为out/*/**
  • excludes: 'out/*/build/**':排除所有<BUILD_NAME>目录下build子目录的全部内容
  • fingerprint: true:可选参数,开启文件指纹校验,方便后续版本比对
  • 可按需添加allowEmptyArchive: false参数,匹配不到文件时直接报错,避免出现空归档的异常情况

特殊场景兼容

如果你的Jenkins版本较旧,或者out目录下存在多个<BUILD_NAME>目录只需归档最新的一个,可以先通过shell命令获取目标目录名再归档:

stage('Archive') {
    steps {
        script {
            // 获取out目录下最新的子目录名
            def targetBuildDir = sh(script: 'ls -dt out/*/ | head -n 1', returnStdout: true).trim()
            archiveArtifacts artifacts: "${targetBuildDir}*", excludes: "${targetBuildDir}build/**"
        }
    }
}

内容的提问来源于stack exchange,提问作者kiryakov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:36:03