khm*_*ise 22 git 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")
Run Code Online (Sandbox Code Playgroud)
但现在我想获得相应用户的密码,我无法做到...
如果我尝试访问passord等,我总是会得到未知的方法等.
这样做的原因是使用此用户/密码来调用git并从存储库中提取信息.
我总是得到这样的东西:
result: com.cloudbees.plugins.credentials.SystemCredentialsProvider$StoreImpl@1639eab2
Run Code Online (Sandbox Code Playgroud)
在用它进行了更多的实验(以及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}"
}
}
Run Code Online (Sandbox Code Playgroud)
此外,通过使用以下代码段,您可以遍历整个凭据存储:
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}"
}
}
Run Code Online (Sandbox Code Playgroud)
你会得到这样的输出:
[(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]
Run Code Online (Sandbox Code Playgroud)
因此,通过使用子句中的相应类,instanceof
您可以选择所需的内容.
Jea*_*sky 17
这有效.它获取凭证而不是商店.
我没有写任何错误处理,所以如果你没有设置凭证对象(或者可能你有两个),它就会爆炸.这部分很容易添加.棘手的部分是获得正确的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")
Run Code Online (Sandbox Code Playgroud)
jenkins维基的官方解决方案
打印系统中所有凭据的列表及其ID.
def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
com.cloudbees.plugins.credentials.Credentials.class,
Jenkins.instance,
null,
null
);
for (c in creds) {
println(c.id + ": " + c.description)
}
Run Code Online (Sandbox Code Playgroud)
假设...
def CREDENTIAL_ID = "<key_credential_id"
Run Code Online (Sandbox Code Playgroud)
有关提取值的方法,请参阅ssh 凭证实现
def PRIVATE_KEY = com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getStore().getCredentials(com.cloudbees.plugins.credentials.domains.Domain.global()).find { it.getId().equals(CREDENTIAL_ID) }.getPrivateKey()
Run Code Online (Sandbox Code Playgroud)
有关提取值的方法,请参阅用户名密码凭据实现
def PASSWORD = com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getStore().getCredentials(com.cloudbees.plugins.credentials.domains.Domain.global()).find { it.getId().equals(CREDENTIAL_ID) }.getPassword()
Run Code Online (Sandbox Code Playgroud)
def USERNAME = com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getStore().getCredentials(com.cloudbees.plugins.credentials.domains.Domain.global()).find { it.getId().equals(CREDENTIAL_ID) }.getUsername()
Run Code Online (Sandbox Code Playgroud)
有关提取值的方法,请参阅纯凭证实现
def SECRET = com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getStore().getCredentials(com.cloudbees.plugins.credentials.domains.Domain.global()).find { it.getId().equals(CREDENTIAL_ID) }.getSecret().getPlainText()
Run Code Online (Sandbox Code Playgroud)
这允许您执行诸如将凭据注入 docker 代理之类的操作:
def CREDENTIAL_ID = "<key_credential_id"
def SECRET = com.cloudbees.plugins.credentials.SystemCredentialsProvider.getInstance().getStore().getCredentials(com.cloudbees.plugins.credentials.domains.Domain.global()).find { it.getId().equals(CREDENTIAL_ID) }.getSecret().getPlainText()
pipeline {
agent {
dockerfile {
filename "build/Jenkins.Dockerfile"
additionalBuildArgs "--build-arg SECRET=${SECRET}"
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
如果您只想检索给定凭据 ID 的凭据,最简单的方法是使用withCredentials
管道步骤将凭据绑定到变量。
withCredentials([usernamePassword( credentialsId: 'myCredentials',
usernameVariable: 'MYUSER', passwordVariable: 'MYPWD' )]) {
echo "User: $MYUSER, Pwd: $MYPWD"
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
19589 次 |
最近记录: |