Jenkins Active Choice插件Groovy脚本如何调用全局凭据发起API调用
结论
可以在Active Choice插件的Groovy脚本中调用Jenkins全局凭据域配置的凭据。
注意:没有和Pipeline语法中credentials(id)完全等价的快捷调用方式,需要通过Jenkins原生的CredentialsProvider API读取凭据,全程不需要硬编码敏感信息。
实现步骤
前置要求
- 提前在Jenkins凭据库中配置好所需凭据,记录好凭据ID
- 确保Jenkins系统账号(Active Choice脚本默认运行身份)对该凭据有读取权限
- 禁止在脚本中打印、输出凭据明文到日志或参数选项列表,避免凭据泄露
代码示例
场景1:读取Secret Text类型凭据(适用于API Token、Bearer Token等鉴权场景,匹配发起API请求加鉴权头的需求)
import jenkins.model.Jenkins import com.cloudbees.plugins.credentials.CredentialsProvider import org.jenkinsci.plugins.plaincredentials.StringCredentials import groovy.json.JsonSlurper // 替换为你自己配置的凭据ID def targetCredId = "your-api-token-cred-id" // 读取指定类型的凭据列表 def credList = CredentialsProvider.lookupCredentials( StringCredentials.class, Jenkins.instance, null, null ) // 匹配对应ID的凭据,拿到明文Token def apiToken = credList.find { it.id == targetCredId }?.secret?.text if (!apiToken) { return ["错误:未找到ID为${targetCredId}的有效凭据"] } // 发起API请求逻辑 def apiConn = new URL("https://your-api-address/path/to/get/options").openConnection() // 组装鉴权请求头,根据实际鉴权规则调整,比如Basic Auth就换对应格式 apiConn.setRequestProperty("Authorization", "Bearer ${apiToken}") apiConn.requestMethod = "GET" apiConn.setConnectTimeout(5000) apiConn.setReadTimeout(5000) // 解析API返回,组装为参数选项列表,根据实际返回结构调整字段 def respData = new JsonSlurper().parse(apiConn.inputStream) return respData.optionList.collect { it.displayName }
场景2:读取用户名密码类型凭据(适用于Basic Auth等需要账号密码的鉴权场景)
import jenkins.model.Jenkins import com.cloudbees.plugins.credentials.CredentialsProvider import com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials def targetCredId = "your-basic-auth-cred-id" def credList = CredentialsProvider.lookupCredentials( StandardUsernamePasswordCredentials.class, Jenkins.instance, null, null ) def matchedCred = credList.find { it.id == targetCredId } if (!matchedCred) { return ["错误:未找到ID为${targetCredId}的有效凭据"] } def username = matchedCred.username def password = matchedCred.password.text // 后续用username和password组装鉴权头、发起请求即可
常见问题排查
- 如果拿不到凭据:先检查凭据ID是否填写正确,再检查Jenkins权限配置,确认运行脚本的身份有该凭据的读取权限
- 如果API请求失败:先检查网络连通性,若为内部自签名HTTPS接口,需要在脚本中添加证书信任逻辑
- 如果脚本报类找不到错误:检查代码头部的import语句是否完整,对应凭据类型的类是否和你配置的凭据类型匹配
内容的提问来源于stack exchange,提问作者caio nostre
相关产品推荐
相关产品推荐

