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

S.R*_*ond 17 groovy jenkins jenkins-plugins jenkins-workflow

我需要能够在Jenkins管道构建期间创建简单的HTTP POST请求.但是我不能使用简单的curl sh脚本,因为我需要它在Windows和Linux节点上工作,如果我可以避免它,我不希望在节点上强制执行更多的工具安装.

我们正在使用的Pipeline插件中使用的Groovy库应该是完成此任务的完美选择.有一个扩展可供Groovy执行名为http-builder的简单POST ,但我不能在我的生活中解决如何在Jenkins的Groovy安装中使用它.

如果我尝试使用Grapes Grab在Pipeline脚本中使用它,我会收到错误,如此处所示.

@Grapes(
    @Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.7.1')
)
Run Code Online (Sandbox Code Playgroud)

Groovy Jenkins使用的捆绑版本可能不支持Grapes Grab.是否可以简单地下载并添加http-builder及其依赖项到Jenkins Groovy安装到节点?

小智 36

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

它很好地集成在groovy中,所以你可以像这样使用它:

def response = httpRequest "http://httpbin.org/response-headers?param1=${param1}"
Run Code Online (Sandbox Code Playgroud)

  • 它确实:``httpRequest customHeaders:[[name:'FOO',value:'BAR']],url:'http:// company.com'`` (10认同)

The*_*lis 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")
Run Code Online (Sandbox Code Playgroud)

  • 因为脚本安全性插件不允许调用URL.openConnection()方法 (2认同)