You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:39:35