Jenkins Git插件未收到发布的参数 [英] Jenkins Git Plugin does not receive posted Parameters

查看:208
本文介绍了Jenkins Git插件未收到发布的参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用Node.js以编程方式构建采用Git参数的Jenkins作业.

I am trying to use Node.js to programmatically build Jenkins jobs that take Git parameters.

我将参数作为发布数据发送,如下所示.但是,无论我为ref分配什么值,Jenkins都会使用默认参数值(在作业的配置中指定)运行构建.我尝试将参数作为URL中的查询字符串传递,但这也没有用.

I am sending the parameters as post data, as shown below. However, no matter what value I assign to ref, Jenkins runs the build with the default parameter value (specified in the job's configuration). I have tried passing in the parameters as query strings in the URL, but that also did not work.

我正在使用Jenkins v1.651.1和Node v6.2.0.

I am using Jenkins v1.651.1 and Node v6.2.0.

var jobOptions = {
    url: requestedJobObject.url + 'build',
    method: 'POST',
    port: 8080
};

// parameters = { "name": "ref", "value": "origin/master" }
if (!_.isEmpty(parameters)) {

    var jsonParametersString = JSON.stringify({"parameter": parameters});
    var parameterParam = encodeURIComponent(jsonParametersString);
    parameters.json = parameterParam;

    jobOptions.headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Content-Length': querystring.stringify(parameters).length
    };

    jobOptions.url += 'WithParameters';

    postData = querystring.stringify(parameters);
}

// jobOptions contains auth field & separates url into hostname and path
// makes an http request to jobOptions and calls req.write(postData)
makeRequest(jobOptions, callback, responseCB, postData) 

makeRequest发出一个http请求:

makeRequest makes an http request:

function makeRequest (object, callback, responseCB, postData) {
    var accumulator = '';

    var parsedUrl = u.parse('//' + object.url, true, true);

    var options = {
        hostname: parsedUrl.hostname,
        port: object.port || 8080,
        path: parsedUrl.path,
        method: object.method || 'GET',
        auth: getAuthByHost(parsedUrl.hostname)
    };

    if (object.headers) {
        options.headers = object.headers;
    }

    var response = null;
    var req = http.request(options, function(res) {
        response = res;

        res.on('data', function (data) {
            accumulator = accumulator + data.toString();
            res.resume();
        });

        res.on('close', function () {
            // first assume accumulator is JSON object
            var responseContent;
            try {
                responseContent = JSON.parse(accumulator);
            }
            // if not object, use accumulator as string
            catch (err) {
                responseContent = accumulator;
            }

            callback(responseContent, response.statusCode);


            if (responseCB) {
                responseCB(res);
            }

        });
    });

    req.on('close', function () {

        // first assume accumulator is JSON object
        var responseContent;
        try {
            responseContent = JSON.parse(accumulator);
        }
        catch (err) {
            responseContent = accumulator;
        }

        callback(responseContent, response.statusCode);

        if (responseCB) {
            responseCB(response);
        }

    });

    if (postData) {
        req.write(postData);
    }

    req.end();
}

推荐答案

尝试一下,它对我有用:

try this, it works for me:

var auth = 'Basic yourUserToken';
var jobOptions = {
    url:'jenkinsHostName:8080/jenkins/job/jobName/' +'build',
    method: 'POST',
    port: 8080
};

var parameter = {"parameter": [{"name":"ref", "value":"origin/master"}]};
var postData;
if (!_.isEmpty(parameter)) {

    var jsonParametersString = JSON.stringify(parameter);
    jobOptions.headers = {
        'Authorization':auth,
       'Content-Type': 'application/x-www-form-urlencoded',
    };

    jobOptions.url += '?token=jobRemoteTriggerToken';
    postData = "json="+jsonParametersString;

    console.log("postData = " + postData);
}   
var callback;
var responseCB;
makeRequest(jobOptions, callback, responseCB, postData) ;

它基于您的代码.我删除了querystring-在参数对象上执行查询时似乎返回了一个空字符串.我将/buildWithParameters更改为/build-其他方法无效.

It is based on your code. I removed the querystring - it seems that it returned an empty string when performed on the parameters object. I change /buildWithParameters to /build - it didn't work the other way.

此外,请验证当您在标头中传递"Content-Length"时,它不会截断您的json参数对象(我将其删除了).

In addition, verify that when you pass the 'Content-Length' in the header, it doesn't truncated your json parameters object (I removed it ).

还请注意,我使用了用户API令牌,您可以在

also note that I used the user API token, that you can get at

这篇关于Jenkins Git插件未收到发布的参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆