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

时间:2016-03-20 15:45:13

标签: jenkins groovy jenkins-plugins jenkins-workflow

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

我们正在使用的Pipeline插件中使用的Groovy库应该非常适合这项任务。有一个扩展可用于Groovy执行名为http-builder的简单POST,但我不能在我的生活中找出如何在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 个答案:

答案 0 :(得分:33)

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

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

$scope.getUser = function(value) {
     return $q(function(resolve, reject){
            $http({type: "GET", url: "http://mysiteurl/_api/web/siteusers$top=5000",
                   headers: { "ACCEPT": "application/json;odata=verbose"}})

            .success(function(data) {

                $scope.results = data.d.results;

                $scope.user_attributes = [];

                for(i=0; i < data.d.results.length; i++) {  
                    if(data.d.results[i].Id == value) { 
                        resolve(data.d.results[i].Title);
                    }
                };  
            });
        }




$scope.getUser(data.d.results[i].Project_x0020_POCId)
.then(function(user){
   alert(user)
 });

答案 1 :(得分: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")

答案 2 :(得分:-2)

你必须将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