插件中的Jenkins文件系统是什么?

时间:2017-09-15 06:28:34

标签: java jenkins

我有一个传递测试的类,如果我在Jenkins之外的一个单独的Java类中调用它,则会运行。它的构造函数有这个:

this.fs = FileSystems.getDefault();

稍后执行时,我在看到空指针异常后添加了一个健全性检查。

if (this.fs == null) {
  throw new Exception("No FileSystem found");
}

因此,当此插件在Jenkins中运行时,默认FileSystemnull,并抛出该异常。我的原始代码使用Paths.get,但我已将其切换为this.fs.getPath(stringPath);,因此我可以使用DI为单元测试创​​建FileSystem

使用Paths.get在重构之前工作正常,但我不确定如何使用该方法知道正确的FileSystem,特别是考虑到默认值似乎没有设置这种环境。

2 个答案:

答案 0 :(得分:0)

从未听说过这样的问题。听起来您的环境严重受损,因为这是由Java平台定义的。尝试平分 - 逐步删除插件中的非关键部分,直到找出触发问题的方式。

答案 1 :(得分:0)

使用System.out后,我意识到构造函数不会在插件更新上运行。它在保存作业配置时运行。因此,当我保存作业配置时,这通过副作用解决了我的问题。我最初没有设置this.fs,因此更新插件并没有运行这些新行。因此,我不应该将内容放入不会用于配置的构造函数中。事后看来,这是有道理的,因为它真的是@DataBoundConstructor,这意味着它被用于来自配置的数据。