【发布时间】:2018-08-22 23:23:29
【问题描述】:
我有以下 Groovy 脚本作为 Jenkins 管道的一部分
permissions.groovy
enum PermissionType {
ANONYMOUS,
AUTHENTICATED
}
def get_job_permissions(PermissionType permission) {
...
}
return this
我将此文件加载到另一个 Groovy 文件中,作为我的 Jenkins 管道的一部分,并调用 get_job_permissions 作为参数传递其中一个枚举。
管道.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
- 更改大小写(尽管我认为枚举需要以大写字符开头?)
这些解决方案都不允许我从调用脚本中引用枚举类型,我理解这是因为我试图通过脚本实例引用类型来访问它。
但是如果我不能这样做,最好的方法是什么?
谢谢
【问题讨论】:
标签: jenkins groovy jenkins-pipeline