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

如何在Jenkins新构建启动前清理所有阶段的工作区?

清理Jenkins并行流水线的所有关联工作区方案

方法1:流水线内置步骤结合节点遍历清理

在新构建的最开头(所有业务阶段之前)添加前置清理阶段,遍历项目涉及的节点,批量删除所有匹配格式的工作区:

pipeline {
    agent none
    stages {
        stage('Pre-Clean All Workspaces') {
            steps {
                script {
                    // 定义需要清理的目标节点列表
                    def targetNodes = ['w1']
                    targetNodes.each { nodeName ->
                        node(nodeName) {
                            // 删除当前节点下该项目的所有工作区(含@1、@2这类并行后缀)
                            sh 'rm -rf $WORKSPACE*'
                            // Windows节点替换为以下命令
                            // bat 'rmdir /s /q %WORKSPACE%*'
                        }
                    }
                }
            }
        }
        // 后续并行构建及分析上传阶段...
        stage('Parallel Builds') {
            parallel {
                stage('Build Stream 1') {
                    agent { node 'w1' }
                    stages {
                        stage('build') { steps { sh 'echo build stream 1' } }
                        stage('test-xyz') { steps { sh 'echo run test xyz' } }
                        stage('test-123') { steps { sh 'echo run test 123' } }
                    }
                }
                stage('Build Stream 2') {
                    agent { node 'w1' }
                    stages {
                        stage('build') { steps { sh 'echo build stream 2' } }
                        stage('test-abc') { steps { sh 'echo run test abc' } }
                        stage('test-456') { steps { sh 'echo run test 456' } }
                    }
                }
            }
        }
        stage('Analyse & Upload') {
            agent { node 'w1' }
            steps {
                sh 'echo analyse results && echo upload to server'
            }
        }
    }
}
  • 核心逻辑:切换到目标节点后,通过通配符$WORKSPACE*匹配所有关联工作区目录,一次性递归删除。

方法2:利用Workspace Cleanup插件配置前置清理

  1. 安装Jenkins官方的Workspace Cleanup插件
  2. 进入项目配置页,找到「Build Environment」区域,勾选「Delete workspace before build starts」
  3. 在「Additional criteria」中添加规则:勾选「Include pattern」并填入**,同时勾选「Apply to subdirectories」
  4. 展开「Advanced」选项,勾选「Delete all build workspaces for this project on the node」—— 该选项会清理当前项目在节点上的所有工作区实例(含并行产生的带@后缀的工作区)

方法3:通过Jenkins Groovy API批量清理

如果需要更灵活的节点与工作区匹配规则,可使用Jenkins系统Groovy脚本(需确保流水线有对应权限):

script {
    def currentJob = Jenkins.instance.getItemByFullName(env.JOB_NAME)
    def targetNodes = Jenkins.instance.nodes.findAll { it.name.startsWith('w1') }
    
    targetNodes.each { node ->
        def workspaceParentDir = node.getWorkspaceFor(currentJob)?.parent
        if (workspaceParentDir) {
            workspaceParentDir.list().each { dir ->
                // 匹配当前项目的所有工作区目录
                if (dir.name.startsWith(currentJob.name)) {
                    dir.deleteRecursive()
                    echo "Deleted workspace: ${dir.path}"
                }
            }
        }
    }
}
  • 该方法会自动筛选w1开头的节点,找到当前项目的所有关联工作区并递归删除,适合跨多个节点的复杂场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:40:06