Jenkins共享库:使用源类转换为DSL

时间:2018-07-26 18:29:32

标签: java jenkins groovy shared-libraries

使用Jenkins共享库和DSL遇到很多麻烦。 当前,在我的源文件夹中,我声明了3个类:Constant,Utilities和EnvironmentManager。

常量不是静态类,而仅包含静态方法。 其他班是普通班。

在Jenkins文件中,我将以以下方式实例化并使用这些类:

def lib= library("sharedlib").com.foo
object= Constants.new()

object.getDefaultPath() // Works
Constants.getDefaultPath() // Works
com.foo.Constants.getDefaultPath() // Also Works

我正在尝试在DSL(位于库的vars文件夹中)上做同样的事情

def call(script, branch_to_build) {

script.echo com.foo.Constants.getDefaultPath() // Works

object = com.foo.Constants.new() // Fails see error 1
object = Constants.new() // Fails see error 2


}

我的问题是:为什么此行失败?我尝试了几种选择,但无法从其构造函数实例化一个对象。

错误1:

  

groovy.lang.MissingPropertyException:没有此类属性:com用于类:   myDSL

错误2:

  

groovy.lang.MissingPropertyException:无此类属性:的常量   类别:myDSL

此外,尝试将库作为参数传递给它:

def call(script, library, branch_to_build) {

    script.echo com.foo.Constants.get_build_windows_script()

    constants           = library.Constants.new()   
}
  

java.lang.IllegalAccessException:com.foo.Constants定义于   文件://.../test_build_multi/EFS-1996_RemoveDuplicationFromJenkinsFiles/34/libs/sharedlib/vars/myDLS.groovy不在其中   文件://.../test_build_multi/EFS-1996_RemoveDuplicationFromJenkinsFiles/34/libs/sharedLibrary/src/

最后,如果我尝试在DSL顶部声明导入:

import com.foo

我得到:

  

\ ... \ builds \ foo \ Gitlab \ test_build_multi \ EFS-1996_RemoveDuplicationFromJenkinsFiles \ 35 \ libs \ sharedLibrary \ vars \ myDSL.groovy:   1:无法解析类com.foo @第1行,第1列。导入   com.foo

解决方法:

如果我这样声明我的DSL:

def call(com.foo.EnvironmentManager environment, com.foo.Utilities utilities, com.foo.Constants constants) {

    node(constants.allowed_nodes()) {

        ws(environment.get_custom_workspace()) {

             ....
        }
    }

}

然后一切正常。

但是我觉得这很愚蠢,因为它迫使我重复声明,而不必重复声明。

那么,如何在同一库DSL中使用自己的库类?

感谢帮助。

0 个答案:

没有答案