代码之家  ›  专栏  ›  技术社区  ›  Dániel Szoboszlay

如何从helper类访问作业DSL的readFileFromWorkspace?

  •  3
  • Dániel Szoboszlay  · 技术社区  · 7 年前

    我在作业DSL中有大量Jenkins作业定义,它们都依赖于我在helper类中实现的一些常见功能。这就是 jobDsl 运行这些脚本的步骤:

    jobDsl {
      additionalClasspath('jobdsl/src/main/groovy')
      targets('jobdsl/*.groovy')
      sandbox(true)
    }
    

    中的帮助器类之一 jobdsl/src/main/groovy 需要从工作区读取文件,但无法访问 readFileFromWorkspace 作用

    所以这个行不通:

    class MyHelper {
      static Closure processFile(String src) {
        ...
        def txt = readFileFromWorkspace(src)
        ...
      }
    }
    

    我必须采用闭包参数:

    class MyHelper {
      static Closure processFile(String src, Closure rffw) {
        ...
        def txt = rffw(src)
        ...
      }
    }
    

    这使得调用此帮助程序的代码膨胀:

    MyHelper.processFile('foo.txt', { readFileFromWorkspace(it) })
    

    有没有办法让我的班级明白 readFileFromWorkspace ? 事实上,我甚至不知道这个函数属于哪个类。或者它到底是一个真正的函数还是DSL定义的“神奇”的东西。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Surendra Deshpande    7 年前

    HelperClass存在于其他文件中,该文件不在作业dsl上下文中。因此,要使其可见,请尝试执行以下操作。

    class MyHelper {
       static Closure processFile(String src, def dslFactory) {
       ...
       def txt = dslFactory.readFileFromWorkspace(src)
       ...
       }
    }
    
    MyHelper.processFile('foo.txt', this)
    

    以上代码应该适合您,否则如果您遇到任何问题,请回复我。