我有以下Groovy脚本作为Jenkins管道的一部分
permissions.groovy
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
def get_job_permissions(PermissionType permission) {
...
}
return this
我将此文件作为Jenkins管道的一部分加载到另一个Groovy文件中,并调用get_job_permissions作为参数通过其中一个枚举 .
pipeline.groovy
def job_permissions = load 'permissions.groovy'
job_permissions.get_job_permissions(job_permissions.PermissionType.AUTHENTICATED)
Jenkins对此失败并出现以下错误(我已经验证过,在这种情况下,'Script3'是使用enum参数调用get_job_permissions) .
groovy.lang.MissingPropertyException: No such property: PermissionType for class: Script3
我知道脚本加载和调用是正确的,因为我可以将get_job_permissions的签名更改为以下内容,在pipeline.groovy中传递一个随机字符串,并且调用正确完成 .
def get_job_permissions(def permission) {
...
}
如果我不更改签名,仍然通过一个随机字符串,Jenkins失败了构建,因为它无法找到它认为我正在调用的方法(这是真的,它不存在,它期望一个PermissionType类型) .
我已经尝试了许多不同的东西来将PermissionType暴露给调用脚本
-
添加@Field(不合法的Groovy)
-
将枚举定义更改为public def PermissionType(不合法Groovy)
-
删除并向枚举定义添加public
-
更改大小写(虽然我认为枚举需要以大写字母开头?)
这些解决方案都不允许我从调用脚本引用枚举类型,我理解这是因为我试图通过脚本实例引用它来访问类型 .
但如果我不能这样做,最好的办法是什么?
谢谢
1 回答
我设法得到了一些工作 - 我当然知道这可能不是正确的,甚至是好的方式,但它解除了我的阻力并给了我所需要的东西 .
而不是像往常一样在脚本中定义枚举
我创建了一个包含枚举的类,其成员变量初始化为枚举中的值 .
permissions.groovy
然后,我可以在脚本中公开该类的实例,正常加载它,最后我可以访问枚举值 .
pipeline.groovy
我想我们都同意这有点疯狂,但它给了我所需要的东西 .
我只有这个问题(我现在可以忍受)
您只能在脚本中加载文件,否则会出现重复的类异常
你不能在外部方法中使用类型,只能使用值 - 对我来说没问题,因为任何接受类型的方法都是类定义的本地方法
仍然想知道正确的方法来做到这一点:)