..

Jenkins Pipeline 判断 slave 上是否存在文件,注意避坑!

今天某个网友遇到了一个古怪的问题,在 Jenkins Pipeline 中判断 slave 上是否存在文件,但是无论怎么判断都是返回 false。下面是他的核心代码:

def fh = new File(filePath)
if(fh.exists()){
    echo "文件存在"
} else {
    echo "文件不存在"
}

最后不管他怎么调试,上面的脚本总是输出“文件不存在”。

后来经过一番研究,终于找到了原因。在 pipeline 中, java 代码的 context 是运行在 master 节点上的,所以上面的代码中的 filePath 是 master 节点的路径。而 master 节点上没有这个文件,所以返回 false。正确的判断文件是否存在,应该使用 pipeline utils 库中的 fileExists 方法,代码如下:

def filePath = "xxx"
if(fileExists(filePath)){
    echo "文件存在"
} else {
    echo "文件不存在"
}

读取文件也是同样的问题,需要使用 readFile 方法。不要 new File 对象来读取文件。