Jenkins Git Plugin ne reçoit pas les parameters publiés

J’essaie d’utiliser Node.js pour créer par programme des travaux Jenkins qui prennent des parameters Git.

J’envoie les parameters en tant que données postales, comme indiqué ci-dessous. Cependant, quelle que soit la valeur que j’atsortingbue à ref , Jenkins exécute la construction avec la valeur de paramètre par défaut (spécifiée dans la configuration du travail). J’ai essayé de passer les parameters sous forme de chaînes de requête dans l’URL, mais cela ne fonctionnait pas non plus.

J’utilise Jenkins v1.651.1 et Node v6.2.0.

 var jobOptions = { url: requestedJobObject.url + 'build', method: 'POST', port: 8080 }; // parameters = { "name": "ref", "value": "origin/master" } if (!_.isEmpty(parameters)) { var jsonParametersSsortingng = JSON.ssortingngify({"parameter": parameters}); var parameterParam = encodeURIComponent(jsonParametersSsortingng); parameters.json = parameterParam; jobOptions.headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': queryssortingng.ssortingngify(parameters).length }; jobOptions.url += 'WithParameters'; postData = queryssortingng.ssortingngify(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 fait une requête 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.toSsortingng(); 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 ssortingng 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(); } 

essayez ceci, cela fonctionne pour moi:

 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 jsonParametersSsortingng = JSON.ssortingngify(parameter); jobOptions.headers = { 'Authorization':auth, 'Content-Type': 'application/x-www-form-urlencoded', }; jobOptions.url += '?token=jobRemoteTriggerToken'; postData = "json="+jsonParametersSsortingng; console.log("postData = " + postData); } var callback; var responseCB; makeRequest(jobOptions, callback, responseCB, postData) ; 

C’est basé sur votre code. J’ai supprimé la chaîne de requête – il semble qu’elle ait renvoyé une chaîne vide lorsqu’elle a été exécutée sur l’object parameters. Je change / buildWithParameters en / build – cela n’a pas fonctionné dans l’autre sens.

De plus, vérifiez que lorsque vous passez le ‘Content-Length’ dans l’en-tête, il ne tronque pas votre object parameters JSON (je l’ai supprimé).

Notez également que j’ai utilisé le jeton de l’API utilisateur, que vous pouvez obtenir à l’ adresse http: // yourJenkinsUrl / me / configure et cliquez sur le bouton “Jeton de l’API”. entrez la description de l'image ici

Pas sûr de cela, car je ne connais pas Node.js – mais peut-être que ça convient: l’ API d’access distant Jenkins indique que l’entité paramètre dans la requête json doit pointer sur un tableau , même s’il ne rest qu’un paramètre à définir. .

La modification ci-dessous corrige-t-elle le problème (notez les crochets entourant les parameters )?

 [...] var jsonParametersSsortingng = JSON.ssortingngify({"parameter": [parameters]}); [...]