在 Jenkins 管道中,执行相互身份验证 REST 请求的正确方法是什么?
In Jenkins pipeline, what is the correct way to perform mutual-authentication REST requests?
我正在从 Jenkins 管道调用 REST 服务。此 REST 服务使用相互身份验证,因此我必须提供客户端证书进行身份验证。
我可以将证书与我的 Jenkinsfile 一起存储在 Git - 然后我可以将此证书传递给 REST 调用吗?
这是在带有 --cert 参数的 cURL 中执行的:
curl -H "Content-Type: application/json" -H "Accept: application/json" \
--cert ens.p12 \
https://hostname:9000/api/bakery -k
我们如何获得它以便在 Groovy 请求中使用该证书?
def get = new URL("https://hostname:9000/api/bakery").openConnection();
get.setRequestMethod("GET")
get.setRequestProperty("Content-Type", "application/json")
get.getInputStream().getText()
在 Groovy 中你应该使用 HttpBuilder.
代码可能如下所示:
def request = ApacheHttpBuilder.configure{
request.uri = 'https://hostname:9000/api/bakery'
request.contentType = 'application/json'
client.clientCustomizer{ HttpClientBuilder builder ->
builder.sSLContext = provideYourSSLContext()
}
}.get{
response.success{ resp, json ->
println "$resp.statusCode / got JSON: $json"
}
}
这里你必须在 provideYourSSLContext()
方法中加载你的证书。
最终将 cURL 与 Jenkins Pipeline DSL 提供的 sh
结合使用,因为这似乎以最简洁的方式处理了需求。
JSON = sh (
script: 'curl -H "Content-Type: application/json" --cert ens.p12 https://hostname:9000/api/bakery -k',
returnStdout: true
).trim()
我正在从 Jenkins 管道调用 REST 服务。此 REST 服务使用相互身份验证,因此我必须提供客户端证书进行身份验证。
我可以将证书与我的 Jenkinsfile 一起存储在 Git - 然后我可以将此证书传递给 REST 调用吗?
这是在带有 --cert 参数的 cURL 中执行的:
curl -H "Content-Type: application/json" -H "Accept: application/json" \
--cert ens.p12 \
https://hostname:9000/api/bakery -k
我们如何获得它以便在 Groovy 请求中使用该证书?
def get = new URL("https://hostname:9000/api/bakery").openConnection();
get.setRequestMethod("GET")
get.setRequestProperty("Content-Type", "application/json")
get.getInputStream().getText()
在 Groovy 中你应该使用 HttpBuilder.
代码可能如下所示:
def request = ApacheHttpBuilder.configure{
request.uri = 'https://hostname:9000/api/bakery'
request.contentType = 'application/json'
client.clientCustomizer{ HttpClientBuilder builder ->
builder.sSLContext = provideYourSSLContext()
}
}.get{
response.success{ resp, json ->
println "$resp.statusCode / got JSON: $json"
}
}
这里你必须在 provideYourSSLContext()
方法中加载你的证书。
最终将 cURL 与 Jenkins Pipeline DSL 提供的 sh
结合使用,因为这似乎以最简洁的方式处理了需求。
JSON = sh (
script: 'curl -H "Content-Type: application/json" --cert ens.p12 https://hostname:9000/api/bakery -k',
returnStdout: true
).trim()