java-stream - Jenkins 管道脚本将文件复制或移动到另一个目的地

标签 java-stream jenkins-pipeline jenkins-groovy

我正在用 Groovy 语言准备一个 Jenkins 管道脚本。我想将所有文件和文件夹移动到另一个位置。由于 Groovy 支持 Java,所以我使用下面的 java 代码来执行操作。

管道{
代理任何

 stages{    
     stage('Organise Files'){                         
         steps{  
                script{                        
                    File sourceFolder = new File("C:\\My-Source");
                    File  destinationFolder = new File("C:\\My-Destination");                                                   
                    File[] listOfFiles = sourceFolder.listFiles();
                    echo "Files Total: " + listOfFiles.length;  

                    for (File file : listOfFiles) {
                        if (file.isFile()) {
                            echo file.getName()                                                                
                            Files.copy(Paths.get(file.path), Paths.get("C:\\My-Destination"));                                   
                        }
                    }                  
                }                                
            }                           
        } 
    }
}

此代码引发以下异常:

groovy.lang.MissingPropertyException: No such property: Files for class: WorkflowScript



我也试过下面的代码,但它也不起作用。
FileUtils.copyFile(file.path, "C:\\My-Destination");

最后,我确实尝试使用 java I/O Stream 来执行操作,代码如下:
def srcStream = new File("C:\\My-Source\\**\\*").newDataInputStream()
def dstStream = new File("C:\\My-Destination").newDataOutputStream()
dstStream << srcStream
srcStream.close()
dstStream.close()

但它也不起作用并抛出以下异常:

java.io.FileNotFoundException: C:\My-Source (Access is denied)



任何人都可以建议我如何解决问题,还请让我知道如何在复制或移动文件后从源位置删除文件?还有一件事,在复制过程中我可以使用通配符过滤一些文件夹和文件吗?也请让我知道。

最佳答案

不要使用普通的 Java/Groovy 执行这些 I/O 函数。即使您运行它,它也将始终在主服务器上执行,而不是在构建代理上执行。使用 pipeline steps也为此,例如:

bat("xcopy C:\\My-Source C:\\My-Destination /O /X /E /H /K")

或使用 File Operations Plugin
fileOperations([fileCopyOperation(
  excludes: '',
  flattenFiles: false,
  includes: 'C:\\My-Source\\**',
  targetLocation: "C:\\My-Destination"
)]).

我假设在我的示例中我没有找到非常正确的 Windows 路径语法,但我希望你明白这一点。

关于java-stream - Jenkins 管道脚本将文件复制或移动到另一个目的地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53353565/

相关文章:

jenkins-pipeline - Jenkins Multibranch Pipeline 失败,因为它在 Groovy Sandbox 中运行

java - 如何在同一个 `groupingBy` 中处理 `stream()` 的结果 List<T> 值?

java-8 - 在 Java 8 中创建循环和无限范围整数的最惯用方法

java - 在流中对 LongAdder 进行排序

jenkins - Scripted Pipeline 语法中并行内部的顺序阶段

linux - 如何在循环的 shell 脚本中访问 jenkins groovy 变量的值

jenkins-pipeline - 如何修复 - stageResult 设置为 FAILURE 但仍然在 jenkins 中获得成功

Java 8 : mapping list inisde a list

github - 如何在 Jenkinsfile 中设置 github 拉取请求构建?

Jenkins 声明式管道锁名称与变量