I’m developing a Jenkins plugin that executes performance measurements and thereby gives users the option to spot performance regressions that occurred for unit tests (GitHub - jenkinsci/peass-ci-plugin: Jenkins plugin for peass to support performance measurement in CI). After performance changes happened, the users look at the plugin, where all changes are summarized in one Action
. Afterwards they review changes and potentially consider a change to be necessary due to required functional requrements, or they consider a change to require a refactoring etc…
To facilitate an overview over the reviewing results by the plugin users, I would like to save a state of the change reviewing. It’s no problem to create the form: peass-ci-plugin/index.jelly at b59e396cf7fecd73fc76e6db6a848b5fa8477404 · jenkinsci/peass-ci-plugin · GitHub, and at this part of the jelly code, it is clear which commit and test case has been reviewed.
How is it also possible to react to the requests? I had a look at the Jenkins code, and it seems like Descriptor
and Describable
are classes that could be used, but I did not find an example on their usage outside of regular Builder
.
It would also be sufficient to me if I could get the pure request data, the serialization could happen as JSON in the current build folder, but I did not find anything about how to process that requests (besides the stapler basic documentation). Is it maybe possible to define a doUpdate( StaplerRequest request, StaplerResponse response )
method somewhere and thereby get the requests data?
EDIT
After some fiddeling, I made some progress on this issue.
In the Action, I added the following method to receive data via POST:
@RequirePOST
public FormValidation doUpdate(@QueryParameter String myParameter,
@QueryParameter String classification) {
System.out.println("Parameter " + myParameter);
System.out.println("Classification " + classification);
return FormValidation.ok("Updated value");
}
Now I need something to send the values on the page.
The form might look like this:
<form action="update" method="post">
<div style='display: none'>
<f:entry name="myParameter" title="Choose Parameter" field="parameter">
<f:textbox value="${myParameterValue}"/>
</f:entry>
</div>
<f:entry name="classification" title="Choose Classificiation" field="classification">
<select name="classification">
<j:forEach var="option" items="${it.getChangeClassificationArray()}">
<j:if test="${it.getClassification(project.getKey(), lastCommit, change.getTestcase()).equals(option)}">
<option value="${option}" selected="selected">${option}</option>
</j:if>
<j:if test="${!it.getClassification(project.getKey(), lastCommit, change.getTestcase()).equals(option)}">
<option value="${option}">${option}</option>
</j:if>
</j:forEach>
</select>
</f:entry>
<f:validateButton method="update" type="submit" title="Classify" with="project,commit,testcase,classification" />
</form>
The first three values need to be fixed and the classification should be configurable by the user to fixed values.
Unfortunately, using the f:validateButton
results in a request to /jenkins/job/$JOBID/$BUILDID/overview/null/update
(where overview is my action name), and the parameters look like myParameter=$PARAMETER&classification=TODO
, so this variant contains two problems: there is null in the link and it does not contain a Jenkins crumb.
When I change the f:validateButton
into an f:submit
, the request goes to /jenkins/job/geomap-overview/40/overview/update
and actually is handled by Java. Unfortunately, the payload is _.myParameter=$PARAMETER&classification=TODO&Jenkins-Crumb=df5d96f0a06ccd3e24682fee2972fc3074917134076b33f92bdc2cdaea4e3cf8&json=%7B%22myParameter%22%3A+%22$PARAMETER%22%2C+%22classification%22%3A+%22TODO%22%2C+%22Jenkins-Crumb%22%3A+%22df5d96f0a06ccd3e24682fee2972fc3074917134076b33f92bdc2cdaea4e3cf8%22%7D&Submit=%C3%9Cbernehmen
. So, this has mainly the problem that the field with the name myParameter
is mapped to _.myParameter
, therefore it is not passed to the doUpdate
method.
If anyone has an idea how to fix this button issue, I would be glad to hear it.