如何在Jenkins Groovy脚本中执行HTTP POST请求?

22
我需要在 Jenkins Pipeline 构建期间创建简单的 HTTP POST 请求。然而,我不能使用简单的 curl sh 脚本,因为我需要它在 Windows 和 Linux 节点上工作,并且如果可以避免的话,我不希望强制节点安装更多的工具。
我们正在使用的 Pipeline 插件中使用的 Groovy 库应该非常适合这个任务。有一个叫做 http-builder 的扩展可用于 Groovy 执行简单的 POST 请求,但我无法弄清楚如何在 Jenkins 的 Groovy 安装中使用它。
如果我尝试使用 Grapes Grab 将其用于 Pipeline 脚本,我会收到一个错误消息,无法这样做,如此所示
@Grapes(
    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')
)

也许Grapes Grab在Jenkins捆绑的Groovy版本中不受支持。是否可以简单地下载并将http-builder及其依赖项添加到发送给节点的Jenkins Groovy安装中?

可能是重复问题 https://dev59.com/w18e5IYBdhLWcg3wfaYy - KeepCalmAndCarryOn
1
很遗憾不是这样的 - 这更多地与Jenkins如何集成有关。它并不像那么简单。 :/ - S.Richmond
我认为你需要括号 - @Grapes([ @Grab(...) ]) - John DeRegnaucourt
2个回答

46

对于Jenkins Pipeline,我建议安装"HTTP-Request"插件

它很好地集成了Groovy,因此您可以像这样使用它:

def response = httpRequest "http://httpbin.org/response-headers?param1=${param1}"

1
非常重要的限制:它不允许以编程方式添加标题。 - eleven
18
它的作用是:httpRequest customHeaders: [[name: 'FOO', value: 'BAR']], url: 'http://company.com'该代码段用于发送 HTTP 请求,并在自定义请求头中添加一个名为 "FOO" 值为 "BAR" 的字段,请求的 URL 为 "http://company.com"。 - LoganMzz
出于安全考虑,请注意:每次执行都会记录所有参数。请注意不要传递私人信息,例如密码或个人信息。(引用官方文档) - Enrique S. Filiage
你好,您是否知道如何通过Jenkins Pipeline中的httprequest插件发送https请求?由于证书是私有的,因此我的https请求将被证书错误阻止,是否有像curl命令中的-k一样的参数?谢谢! - Nina0408

5
也许我有所遗漏,但为什么不直接使用已经在Jenkins类路径上的标准Java库呢?
import java.io.BufferedReader
import java.io.InputStreamReader
import java.io.OutputStreamWriter
import java.net.URL
import java.net.URLConnection

def sendPostRequest(urlString, paramString) {
    def url = new URL(urlString)
    def conn = url.openConnection()
    conn.setDoOutput(true)
    def writer = new OutputStreamWriter(conn.getOutputStream())

    writer.write(paramString)
    writer.flush()
    String line
    def reader = new BufferedReader(new     InputStreamReader(conn.getInputStream()))
    while ((line = reader.readLine()) != null) {
      println line
    }
    writer.close()
    reader.close()
}

sendPostRequest("http://www.something.com", "param1=abc&param2=def")

6
由于脚本安全插件不允许调用URL.openConnection()方法,因此需要对其进行修改。 - LoganMzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接