Jenkins更新后获取文件夹凭据脚本出现方法重载歧义错误求助
解决Jenkins更新后CredentialsProvider.lookupCredentials重载歧义问题
Jenkins更新后,Credentials插件的CredentialsProvider.lookupCredentials方法新增了重载版本,导致Groovy无法自动推断要调用的方法,从而抛出重载歧义的运行时异常。即使将Folder强制转换为Item接口,仍可能因为存在多个接受Item参数的重载而无法解决问题。
解决方法:调用参数完整的重载版本
通过显式传入所有必要参数(包括认证上下文和过滤条件),消除Groovy的方法匹配歧义。修改后的代码如下:
import com.cloudbees.plugins.credentials.CredentialsProvider import com.cloudbees.plugins.credentials.Credentials import jenkins.model.Jenkins import hudson.security.ACL import java.util.Collections // 获取目标文件夹实例 def myFolder = Jenkins.instance.getItemByFullName('my/folder') // 调用带完整参数的lookupCredentials方法 def creds = CredentialsProvider.lookupCredentials( Credentials.class, myFolder, ACL.SYSTEM, // 使用系统权限获取该文件夹下的所有凭据 Collections.emptyList() // 空列表表示不添加额外过滤条件 )
说明
ACL.SYSTEM:以系统权限身份获取凭据,确保能访问该文件夹下所有可见的凭据;如果需要以当前用户身份获取,可替换为Jenkins.instance.getAuthentication()。Collections.emptyList():用于指定凭据的域过滤条件,空列表表示不过滤所有域的凭据。
备选方案:显式声明变量类型
如果不想添加额外参数,也可以通过显式声明myFolder的类型为hudson.model.Item,帮助Groovy明确匹配方法重载:
import com.cloudbees.plugins.credentials.CredentialsProvider import com.cloudbees.plugins.credentials.Credentials import jenkins.model.Jenkins import hudson.model.Item // 显式声明变量类型为Item Item myFolder = Jenkins.instance.getItemByFullName('my/folder') def creds = CredentialsProvider.lookupCredentials( Credentials.class, myFolder )
如果这个方案仍不生效,优先使用第一种带完整参数的写法,这是消除重载歧义最可靠的方式。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

