Skip to content

Commit a388fcb

Browse files
committed
Rewrite rebuild actions using javascript java injection
First version of rebuild that includes all the job parameters. Some improvements should be done like have just one common.jelly but not clear how jelly include logic works. Tested using gerrit-trigger Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
1 parent 0687136 commit a388fcb

File tree

6 files changed

+49
-6
lines changed

6 files changed

+49
-6
lines changed

src/main/java/io/jenkins/plugins/pipelinegraphview/utils/AbstractPipelineViewAction.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,24 @@
66
import hudson.model.BallColor;
77
import hudson.model.ParametersAction;
88
import hudson.model.ParametersDefinitionProperty;
9+
import hudson.model.Queue;
910
import hudson.security.Permission;
1011
import hudson.util.HttpResponses;
12+
13+
import java.io.IOException;
1114
import java.util.concurrent.ExecutionException;
1215
import java.util.concurrent.TimeoutException;
1316
import java.util.logging.Level;
1417
import java.util.logging.Logger;
1518
import net.sf.json.JSONObject;
1619
import org.jenkins.ui.icon.IconSpec;
20+
import org.jenkinsci.plugins.workflow.cps.replay.ReplayAction;
1721
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
1822
import org.kohsuke.stapler.HttpResponse;
1923
import org.kohsuke.stapler.StaplerRequest2;
2024
import org.kohsuke.stapler.WebMethod;
25+
import org.kohsuke.stapler.bind.JavaScriptMethod;
26+
import org.kohsuke.stapler.interceptor.RequirePOST;
2127

2228
public abstract class AbstractPipelineViewAction implements Action, IconSpec {
2329
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
@@ -57,6 +63,27 @@ public boolean isParameterized() {
5763
return property != null && !property.getParameterDefinitions().isEmpty();
5864
}
5965

66+
/**
67+
* Handles the rebuild request and redirects to parameterized
68+
* and non parameterized build when needed.
69+
* @throws ExecutionException
70+
* @throws IOException
71+
*/
72+
@RequirePOST
73+
@JavaScriptMethod
74+
public boolean doRebuildjob() throws IOException, ExecutionException {
75+
if (run != null) {
76+
ReplayAction replayAction = run.getAction(ReplayAction.class);
77+
Queue.Item item = replayAction.run2(replayAction.getOriginalScript(), replayAction.getOriginalLoadedScripts());
78+
79+
if (item == null) {
80+
return false;
81+
}
82+
return true;
83+
}
84+
return false;
85+
}
86+
6087
public String getFullBuildDisplayName() {
6188
return run.getFullDisplayName();
6289
}

src/main/resources/io/jenkins/plugins/pipelinegraphview/PipelineGraphViewAction/index.jelly

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

33
<?jelly escape-by-default='true'?>
4-
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout" xmlns:p="/lib/pipeline-graph-view">
4+
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:p="/lib/pipeline-graph-view">
55
<l:layout title="${%Graph} [${it.fullBuildDisplayName}]" type="one-column">
66
<l:main-panel>
77
<div class="jenkins-app-bar">
@@ -26,8 +26,11 @@
2626
<div class="jenkins-app-bar__controls">
2727
<j:if test="${it.buildable}">
2828
<l:hasPermission permission="${it.permission}">
29+
<j:set var="proxyId" value="${h.generateId()}" />
30+
<st:bind value="${it}" var="rebuildAction${proxyId}"/>
2931
<button id="pgv-rebuild" data-success-message="${%Build scheduled}" data-build-path="../../build"
30-
data-parameterized="${it.parameterized}" class="jenkins-button jenkins-!-build-color">
32+
data-parameterized="${it.parameterized}" data-proxy-name="rebuildAction${proxyId}"
33+
class="jenkins-button jenkins-!-build-color">
3134
<l:icon src="symbol-play-outline plugin-ionicons-api"/>
3235
${%Rebuild}
3336
</button>

src/main/resources/io/jenkins/plugins/pipelinegraphview/consoleview/PipelineConsoleViewAction/index.jelly

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22

33
<?jelly escape-by-default='true'?>
4-
<j:jelly xmlns:j="jelly:core" xmlns:l="/lib/layout" xmlns:dd="/lib/layout/dropdowns">
4+
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:l="/lib/layout" xmlns:dd="/lib/layout/dropdowns">
55
<l:layout title="${%Build log} [${it.buildDisplayName}]" type="one-column">
66
<l:main-panel>
77
<div class="jenkins-app-bar">
@@ -24,8 +24,11 @@
2424
<div class="jenkins-app-bar__controls">
2525
<j:if test="${it.buildable}">
2626
<l:hasPermission permission="${it.permission}">
27+
<j:set var="proxyId" value="${h.generateId()}" />
28+
<st:bind value="${it}" var="rebuildAction${proxyId}"/>
2729
<button id="pgv-rebuild" data-success-message="${%Build scheduled}"
2830
data-build-path="../../build" data-parameterized="${it.parameterized}"
31+
data-proxy-name="rebuildAction${proxyId}"
2932
class="jenkins-button jenkins-!-build-color">
3033
<l:icon src="symbol-play-outline plugin-ionicons-api"/>
3134
${%Rebuild}

src/main/resources/io/jenkins/plugins/pipelinegraphview/multipipelinegraphview/MultiPipelineGraphViewAction/index.jelly

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
<l:app-bar title="${%Build} ${it.jobDisplayName}">
88
<j:if test="${it.buildable}">
99
<l:hasPermission permission="${it.permission}">
10+
<j:set var="proxyId" value="${h.generateId()}" />
11+
<st:bind value="${it}" var="rebuildAction${proxyId}"/>
1012
<button id="pgv-rebuild" data-success-message="${%Build scheduled}" data-build-path="../build"
11-
data-parameterized="${it.parameterized}" class="jenkins-button jenkins-!-build-color">
13+
data-parameterized="${it.parameterized}" data-proxy-name="rebuildAction${proxyId}"
14+
class="jenkins-button jenkins-!-build-color">
1215
<l:icon src="symbol-play-outline plugin-ionicons-api"/>
1316
${%Build}
1417
</button>

src/main/resources/io/jenkins/plugins/pipelinegraphview/multipipelinegraphview/MultiPipelineGraphViewAction/jobMain.jelly

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<?jelly escape-by-default='true'?>
3-
<j:jelly xmlns:j="jelly:core" xmlns:f="/lib/form">
3+
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:f="/lib/form">
4+
45
<j:if test="${it.showGraphOnJobPage}">
56
<div id="multiple-pipeline-root"/>
67
<script src="${rootURL}/plugin/pipeline-graph-view/js/bundles/multi-pipeline-graph-view-bundle.js"/>

src/main/webapp/js/build.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,13 @@ if (rebuildButton) {
55
event.preventDefault();
66
const buildUrl = `${rebuildButton.dataset.buildPath}?delay=0sec`
77
if (rebuildButton.dataset.parameterized === 'true') {
8-
window.location.href = buildUrl
8+
var rebuildAction = window[`${rebuildButton.dataset.proxyName}`];
9+
rebuildAction.doRebuildjob(function (success) {
10+
var result = success.responseJSON;
11+
if (result) {
12+
window.hoverNotification(rebuildButton.dataset.successMessage, rebuildButton);
13+
}
14+
});
915
} else {
1016
fetch(buildUrl, {
1117
method: 'post',

0 commit comments

Comments
 (0)