Jenkins凭证通过Groovy存储访问

我找到了一种方法来访问Jenkins中的凭据存储区:

def getPassword = { username ->

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(

com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,

jenkins.model.Jenkins.instance

)

def c = creds.findResult { it.username == username ? it : null }

if ( c ) {

println "found credential ${c.id} for username ${c.username}"

def credentials_store = jenkins.model.Jenkins.instance.getExtensionList(

'com.cloudbees.plugins.credentials.SystemCredentialsProvider'

)[0].getStore()

println "result: " + credentials_store

} else {

println "could not find credential for ${username}"

}

}

getPassword("XYZ")

但是现在我想获取我不能做的适当用户的密码…

我总是得到未知的方法等,如果我尝试访问passord等。

这样做的原因是使用此用户/密码来调用git并从存储库中提取信息。

我总是得到这样的东西:

result: com.cloudbees.plugins.credentials.SystemCredentialsProvider$StoreImpl@1639eab2

更新资料

在尝试了更多(以及Jeanne Boyarsky的暗示)之后,我发现我正在考虑编译。以下内容已为我提供了用户密码:

def getUserPassword = { username ->

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(

com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,

jenkins.model.Jenkins.instance

)

def c = creds.findResult { it.username == username ? it : null }

if ( c ) {

return c.password

} else {

println "could not find credential for ${username}"

}

}

此外,通过使用以下代码片段,您可以遍历整个凭据存储:

def credentials_store = jenkins.model.Jenkins.instance.getExtensionList(

'com.cloudbees.plugins.credentials.SystemCredentialsProvider'

)

println "credentials_store: ${credentials_store}"

println " Description: ${credentials_store.description}"

println " Target: ${credentials_store.target}"

credentials_store.each { println "credentials_store.each: ${it}" }

credentials_store[0].credentials.each { it ->

println "credentials: -> ${it}"

if (it instanceof com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl) {

println "XXX: username: ${it.username} password: ${it.password} description: ${it.description}"

}

}

然后您将获得如下输出:

[(master)]:

credentials_store: [com.cloudbees.plugins.credentials.SystemCredentialsProvider@5a2822be]

Description: [The descriptions...]

Target: [com.cloudbees.plugins.credentials.SystemCredentialsProvider@5a2822be]

credentials_store.each: com.cloudbees.plugins.credentials.SystemCredentialsProvider@5a2822be

credentials: -> com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey@38357ca1

credentials: -> com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey@47cf7703

credentials: -> com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl@739abac5

XXX: username: User1 password: Password description: The description of the user.

credentials: -> com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl@884a53e6

XXX: username: User2 password: Password1 description: The description of the user1.

Result: [com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey@38357ca1, com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey@47cf7703, com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl@739abac5, com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl@884a53e6]

因此,通过在instanceof子句中使用适当的类,您可以选择所需的内容。

回答:

这可行。它获取凭证而不是存储。

我没有编写任何错误处理,因此如果您没有设置凭据对象(或者可能有两个),它就会崩溃。该部分很容易添加。棘手的部分是获取正确的API!

def getPassword = { username ->

def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(

com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,

jenkins.model.Jenkins.instance

)

def c = creds.findResult { it.username == username ? it : null }

if ( c ) {

println "found credential ${c.id} for username ${c.username}"

def systemCredentialsProvider = jenkins.model.Jenkins.instance.getExtensionList(

'com.cloudbees.plugins.credentials.SystemCredentialsProvider'

).first()

def password = systemCredentialsProvider.credentials.first().password

println password

} else {

println "could not find credential for ${username}"

}

}

getPassword("jeanne")

以上是 Jenkins凭证通过Groovy存储访问 的全部内容, 来源链接: utcz.com/qa/418510.html

回到顶部