首页 文章

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

提问于
浏览
16

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

我们正在使用的Pipeline插件中使用的Groovy库应该是完成此任务的完美选择 . 有一个扩展可供Groovy执行名为http-builder的简单POST,但我可以't for the life of me work out how to make use of it in Jenkins' Groovy安装 .

如果我尝试使用Grapes Grab在Pipeline脚本中使用它,我会收到错误,as seen here .

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

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

3 回答

  • 33

    也许我错过了什么,但为什么不使用已经在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")
    
  • -2

    对于Jenkin的管道我建议安装"HTTP-Request" plugin

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

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

    你必须将ivy.jar下载并复制到Jenkins lib目录(例如C:\ Program Files(x86)\ Jenkins \ war \ WEB-INF \ lib)并重启Jenkins(例如通过系统服务),然后就可以了从脚本控制台使用@Grab . 进一步阅读:https://groups.google.com/forum/#!msg/job-dsl-plugin/EG6eqQYYI7M/2TKKysNw4QEJ

相关问题