我已经使用以下脚本一年多了,没有出现任何问题:
import com.cloudbees.plugins.credentials.Credentials
Set<Credentials> allCredentials = new HashSet<Credentials>();
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class
);
allCredentials.addAll(creds)
Jenkins.instance.getAllItems(com.cloudbees.hudson.plugins.folder.Folder.class).each{ f ->
creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class, f)
allCredentials.addAll(creds)
}
for (c in allCredentials) {
println(c.id)
if (c.properties.username) {
println(" description: " + c.description)
}
if (c.properties.username) {
println(" username: " + c.username)
}
if (c.properties.password) {
println(" password: " + c.password)
}
if (c.properties.passphrase) {
println(" passphrase: " + c.passphrase)
}
if (c.properties.secret) {
println(" secret: " + c.secret)
}
if (c.properties.privateKeySource) {
println(" privateKey: " + c.getPrivateKey())
}
println("")
}
现在,当我调用它时,我收到此错误:
groovy.lang.GroovyRuntimeException: Ambiguous method overloading for method com.cloudbees.plugins.credentials.CredentialsProvider#lookupCredentials.
Cannot resolve which method to invoke for [class java.lang.Class, class com.cloudbees.hudson.plugins.folder.Folder] due to overlapping prototypes between:
[class java.lang.Class, interface hudson.model.Item]
[class java.lang.Class, interface hudson.model.ItemGroup]
我想也许 Jenkins 更新改变了
lookupCredentials
方法。
我尝试将其显式地设置为
hudson.model.Item
但这会导致相同的错误:
folder = f as hudson.model.Item
creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class, folder)
导致错误的更简洁的示例片段:
def myFolder = Jenkins.instance.getItemByFullName('my/folder')
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class, myFolder
)
可以重现您的问题,试试这个
import com.cloudbees.plugins.credentials.Credentials
Set<Credentials> allCredentials = new HashSet<Credentials>();
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class, hudson.security.ACL.SYSTEM
);
allCredentials.addAll(creds)
Jenkins.instance.getAllItems(com.cloudbees.hudson.plugins.folder.Folder.class).each{ f ->
creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class, f, hudson.security.ACL.SYSTEM)
allCredentials.addAll(creds)
}
for (c in allCredentials) {
println(c.id)
if (c.properties.username) {
println(" description: " + c.description)
}
if (c.properties.username) {
println(" username: " + c.username)
}
if (c.properties.password) {
println(" password: " + c.password)
}
if (c.properties.passphrase) {
println(" passphrase: " + c.passphrase)
}
if (c.properties.secret) {
println(" secret: " + c.secret)
}
if (c.properties.privateKeySource) {
println(" privateKey: " + c.getPrivateKey())
}
println("")
}
或者其他地方的物品也适合我
def myFolder = Jenkins.instance.getItemByFullName('my/folder')
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class , myFolder as hudson.model.Item
)
ps 添加一个参数来调用,将使用另一种方法