Jenkins管道和java.nio.file。*方法的问题

我试图使用java.nio.file。*中的方法在Jenkins管道中执行一些基本的文件操作。 无论代码存在于哪个节点块,代码都在主节点上执行。 在管道中,我已经validation了各种节点块是正确的 – 它们唯一地标识特定节点。 但是,pathExists(以及移动,复制或删除文件的其他代码)始终在主节点上执行。 任何想法发生了什么或如何解决它?

import java.nio.file.* String slavePath = 'C:\\Something\\only\\on\\slave\\node' String masterPath = 'D:\\Something\\only\\on\\master\\node' def pathExists (String pathName) { def myPath = new File(pathName) return (myPath.exists()) } stage('One') { node ('slave') { bat returnStatus: true, script: 'set' println (pathExists(slavePath)) // Should be true but is false. println (pathExists(masterPath)) // Should be false but is true. } node ('master') { bat returnStatus: true, script: 'set' println (pathExists(slavePath)) // false println (pathExists(masterPath)) // true } } 

这是管道脚本的规范。 它写在教程中 。

  • readFile步骤从工作空间加载文本文件并返回其内容(不要尝试使用java.io.File方法 – 这些方法将引用运行Jenkins的主服务器上的文件,而不是当前工作空间中的文件)

  • 还有一个writeFile步骤将内容保存到工作区中的文本文件中

  • fileExists步骤检查文件是否存在而不加载它。

您可以在节点中使用这些Jenkins步骤而不是java.io.Filejava.nio.file.Files ,如下所示。

 String slavePath = 'C:\\Something\\only\\on\\slave\\node' String masterPath = 'D:\\Something\\only\\on\\master\\node' stage('One') { node ('slave') { bat returnStatus: true, script: 'set' println fileExists(slavePath) // Should be true println fileExists(masterPath) // Should be false } node ('master') { bat returnStatus: true, script: 'set' println fileExists(slavePath) // false println fileExists(masterPath) // true } }