Jenkins Git插件不会收到发布的参数

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

我将这些参数作为发布数据发送,如下所示。 然而,无论我分配给ref什么值,Jenkins都使用默认参数值(在作业configuration中指定)运行构build。 我曾尝试在URL中传递参数作为查询string,但也没有工作。

我正在使用Jenkins v1.651.1和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请求:

 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(); } 

试试这个,它适用于我:

 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) ; 

它基于你的代码。 我删除了查询string – 它似乎在参数对象上执行时返回一个空string。 我改变/ buildWithParameters /build立 – 它不工作的另一种方式。

另外,validation当你在头文件中传递'Content-Length'时,它不会截断你的json参数对象(我删除了它)。

还请注意,我使用了用户API令牌,您可以在http:// yourJenkinsUrl / me / configure上单击“显示的API令牌”button。 在这里输入图像描述

不知道这一点,因为我不知道Node.js – 但也许这符合: jenkins远程访问API指出,json请求中的参数实体必须指向一个数组 ,即使只有一个参数要定义。

下面的改变是否解决了这个问题(注意parameters的尖括号)?

 [...] var jsonParametersString = JSON.stringify({"parameter": [parameters]}); [...]