从脚本控制台获取所有文件夹的所有 Jenkins 凭证绑定

问题描述 投票:0回答:1

我已经使用以下脚本一年多了,没有出现任何问题:

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
)
jenkins jenkins-groovy
1个回答
0
投票

可以重现您的问题,试试这个

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 添加一个参数来调用,将使用另一种方法

我看到很多已弃用的方法https://javadoc.jenkins.io/plugin/credentials/com/cloudbees/plugins/credentials/class-use/Credentials.html

© www.soinside.com 2019 - 2024. All rights reserved.