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

如何在Jenkins中编写类似xcopy的Groovy文件移动脚本

在Jenkins中实现类似xcopy的文件移动方案及Groovy脚本示例

在Jenkins里实现跨文件夹的文件移动,有两种实用思路:一是调用系统原生命令(适配不同OS的类似xcopy功能),二是用Groovy编写跨平台脚本,无需依赖系统命令。

一、使用系统原生命令实现(类似xcopy功能)

根据Jenkins运行的操作系统,直接执行对应命令:

  • Windows环境:用xcopy复制后删除源文件实现移动效果
    xcopy "D:\jenkins_workspace\source\*" "D:\jenkins_workspace\target\" /E /H /Y /R
    rmdir /S /Q "D:\jenkins_workspace\source"
    
    参数说明:/E复制所有子目录(含空目录),/H包含隐藏和系统文件,/Y覆盖目标文件不提示,/R覆盖只读文件
  • Linux/macOS环境:同分区用mv高效移动,跨分区用cp+rm组合
    # 同分区直接移动
    mv /var/jenkins_home/workspace/source/* /var/jenkins_home/workspace/target/
    # 跨分区复制后删除源文件
    cp -r /var/jenkins_home/workspace/source/* /var/jenkins_home/workspace/target/
    rm -rf /var/jenkins_home/workspace/source
    

二、Jenkins Groovy脚本实现跨平台文件移动

利用Groovy的File类和Jenkins内置的Apache Commons IO工具,实现跨Windows/Linux的通用移动逻辑,无需关注系统差异。

示例1:完整目录移动

import org.apache.commons.io.FileUtils

// 定义源目录和目标目录(使用Jenkins内置工作空间变量)
def sourceDir = new File("${WORKSPACE}/source")
def targetDir = new File("${WORKSPACE}/target")

// 确保目标目录存在
if (!targetDir.exists()) {
    targetDir.mkdirs()
}

// 移动整个源目录到目标目录(自动处理跨分区情况)
FileUtils.moveDirectory(sourceDir, targetDir)

示例2:筛选特定文件移动(模拟xcopy的过滤功能)

比如只移动.jar和.war格式的文件:

import org.apache.commons.io.FileUtils
import org.apache.commons.io.filefilter.FileFilterUtils

def sourceDir = new File("${WORKSPACE}/source")
def targetDir = new File("${WORKSPACE}/target")

targetDir.mkdirs()

// 定义文件过滤器:仅匹配.jar和.war后缀的文件
def fileFilter = FileFilterUtils.suffixFileFilter([".jar", ".war"])

// 递归遍历源目录,移动符合条件的文件
sourceDir.eachFileRecurse(fileFilter) { sourceFile ->
    // 计算目标文件的相对路径,保持源目录的结构
    def relativePath = sourceDir.toURI().relativize(sourceFile.toURI()).getPath()
    def targetFile = new File(targetDir, relativePath)
    
    // 确保目标文件的父目录存在
    targetFile.parentFile.mkdirs()
    
    // 先尝试重命名移动(同分区高效),失败则用复制+删除(跨分区场景)
    if (!sourceFile.renameTo(targetFile)) {
        FileUtils.copyFile(sourceFile, targetFile)
        sourceFile.delete()
    }
}

三、关键注意事项

  • 权限验证:Jenkins运行用户必须拥有源目录和目标目录的读写权限
  • 跨分区处理:直接用renameTo在跨分区时可能失败,需通过复制+删除兜底
  • 工作空间变量:${WORKSPACE}是Jenkins内置变量,指向当前任务的工作空间根目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:35:33