插件中的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,尤其是在此环境中似乎没有设置默认值。

从未听说过这样的问题。听起来您的环境被严重破坏,因为这是由Java平台定义的。尝试分一分 - 插入插件的非临界部分,直到找出触发问题的是。

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

最新更新