Comment envoyer un travail Jenkins via REST API?

Le script 'Exécuter le système Groovy script' suivant crée une tâche met à jour la description de la construction pour ajouter un bouton qui va envoyer un autre travail de Jenkins qui est paramétré:

import hudson.model.Cause import hudson.model.Job import jenkins.model.Jenkins final JOB_NAME = 'my-job' final jenkins = Jenkins.instance final job = jenkins.getItemByFullName(JOB_NAME, Job.class) final currentBuild = Thread.currentThread().executable final buildNumber = currentBuild.getNumber() job.builds .findAll { build -> build.number == buildNumber } .each { build -> build.setDescription(""" <button type='button' onclick='javascript: var another_job = function() { parameters = {json: {parameter: [{name: "P4_CHANGELIST", value: "0"}]}}; new Ajax.Request("http://builds/job/another-job/build", { method: "post", parameters: Object.toJSON(parameters) }); }; another_job()'>Continue</button>""") } 

Mais en cliquant sur le bouton Continuer, la demande renvoie une Demande de 400 mauvais. Il semble que c'est parce que les paramètres de construction ne sont pas passés correctement (si je supprime les paramètres de construction d'un autre travail et ne l'envoyons pas via les paramètres, les choses fonctionnent bien).

Je ne sais pas si le problème est dû à une mauvaise citation ou à la manière dont j'envoie les paramètres de construction.

Vous devez utiliser JSON. Voir Envoyer des travaux .

Les suivants ont fonctionné pour moi:

 <button type='button' onclick='javascript: var another_job = function() { new Ajax.Request("http://localhost:8081/job/JReport2/build", { method: "post", parameters: {json: Object.toJSON({parameter: [{name: "foo", value: "fobar"}]})} }); }; another_job()'> Start Job </button> 

Ce qui est un peu étrange, c'est que lorsque le bouton qui apparaît à côté de la construction de la liste de construction est poussé, mais ne fonctionne pas avec le bouton qui apparaît sur la description de construction elle-même.