Jenkins管道和java.nio.file *方法的问题
2023-05-16 17:50
这是管道脚本的规范。它写在教程中。
readFile
步骤从工作空间中加载文本文件并返回其内容 (请勿尝试使用java.io.File
方法- 这些将引用Jenkins运行所在的主文件上的文件,而不是当前工作空间中的文件)。还有一个
writeFile
步骤可以将内容保存到工作空间中的文本文件中
fileExists
步骤检查文件是否存在而不加载它。
您可以在节点中使用这些Jenkins步骤来代替java.io.File
或java.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
}
}
解决方法
我正在尝试使用java.nio.file。*中的方法在Jenkins管道中执行一些基本文件操作。无论代码所在的节点块如何,代码都在主节点上执行。在管道中,我已经验证了各种节点块是正确的-
它们唯一地标识特定的节点。但是,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
}
}