Skip to content

Commit c424622

Browse files
authored
Merge pull request #37 from jenkinsci/fix/issue#34
Fix 'dirname/jobname' is not defined
2 parents d41b277 + aa97a89 commit c424622

File tree

5 files changed

+80
-44
lines changed

5 files changed

+80
-44
lines changed

about_integration_tests.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ Note that either for Jenkins and Gogs, the test is based on the LATEST version (
5656

5757
#### The Jenkins Docker Image
5858

59-
The Jenkins container image is built from the `jenkinsci/jenkins:latest` image. The necessary dependencies for the Gogs Webhook plugin under test are installed using the built-in `install-plugins.sh` script (git, workflow-aggregator, pipeline-model-extensions).
59+
The Jenkins container image is built from the `jenkinsci/jenkins:latest` image. The necessary dependencies for the Gogs Webhook plugin under test are installed using the built-in `install-plugins.sh` script (git, workflow-aggregator, pipeline-model-extensions, cloudbees-folder).
6060
The previously built plugin hpi is copied in the container so that it will automatically be loaded at startup.
6161
The password credential for Gogs is loaded in the Jenkins container with the `setup-gogs-user-credentials.groovy.override` groovy script (executed at startup).
6262
It is hardcoded in the script to user "butler" with password "butler".

pom.xml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<jenkins.version>1.625.3</jenkins.version>
1717
<java.level>7</java.level>
1818
<jenkins-test-harness.version>2.13</jenkins-test-harness.version>
19-
19+
<java.level.test>8</java.level.test>
2020
</properties>
2121

2222
<name>Jenkins Gogs plugin</name>
@@ -103,6 +103,12 @@
103103
<version>0.3.7</version>
104104
<scope>test</scope>
105105
</dependency>
106+
<dependency>
107+
<groupId>org.jenkins-ci.plugins</groupId>
108+
<artifactId>cloudbees-folder</artifactId>
109+
<version>6.3</version>
110+
<scope>test</scope>
111+
</dependency>
106112
</dependencies>
107113

108114
<profiles>

src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java

Lines changed: 26 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ associated documentation files (the "Software"), to deal in the Software without
2727
import hudson.model.Cause;
2828
import hudson.security.ACL;
2929
import hudson.triggers.Trigger;
30-
import jenkins.model.Jenkins;
3130
import jenkins.model.ParameterizedJobMixIn;
3231
import jenkins.triggers.SCMTriggerItem;
3332
import org.acegisecurity.context.SecurityContext;
@@ -46,59 +45,45 @@ class GogsPayloadProcessor {
4645
GogsPayloadProcessor() {
4746
}
4847

49-
@SuppressWarnings("unused")
50-
public Map<String, String> getPayload() {
51-
return this.payload;
52-
}
53-
5448
public void setPayload(String k, String v) {
5549
this.payload.put(k, v);
5650
}
5751

5852
public GogsResults triggerJobs(String jobName, String deliveryID) {
5953
SecurityContext saveCtx = ACL.impersonate(ACL.SYSTEM);
60-
Boolean didJob = false;
6154
GogsResults result = new GogsResults();
6255

6356
try {
64-
Jenkins instance = Jenkins.getInstance();
65-
if (instance != null) {
66-
for (BuildableItem project : instance.getAllItems(BuildableItem.class)) {
67-
if (project.getName().equals(jobName)) {
68-
69-
GogsTrigger gTrigger = null;
70-
Cause cause = new GogsCause(deliveryID);
71-
72-
if (project instanceof ParameterizedJobMixIn.ParameterizedJob) {
73-
ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) project;
74-
for (Trigger trigger : pJob.getTriggers().values()) {
75-
if (trigger instanceof GogsTrigger) {
76-
gTrigger = (GogsTrigger) trigger;
77-
break;
78-
}
79-
}
57+
BuildableItem project = GogsUtils.find(jobName, BuildableItem.class);
58+
if (project != null) {
59+
GogsTrigger gTrigger = null;
60+
Cause cause = new GogsCause(deliveryID);
61+
62+
if (project instanceof ParameterizedJobMixIn.ParameterizedJob) {
63+
ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) project;
64+
for (Trigger trigger : pJob.getTriggers().values()) {
65+
if (trigger instanceof GogsTrigger) {
66+
gTrigger = (GogsTrigger) trigger;
67+
break;
8068
}
81-
if (gTrigger != null) {
82-
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
83-
GogsPayload gogsPayload = new GogsPayload(this.payload);
84-
85-
if (item != null)
86-
item.scheduleBuild2(0, gogsPayload);
87-
} else
88-
project.scheduleBuild(0, cause);
89-
90-
didJob = true;
91-
result.setMessage(String.format("Job '%s' is executed", jobName));
9269
}
9370
}
94-
if (!didJob) {
95-
String msg = String.format("Job '%s' is not defined in Jenkins", jobName);
96-
result.setStatus(404, msg);
97-
LOGGER.warning(msg);
71+
72+
if (gTrigger != null) {
73+
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
74+
GogsPayload gogsPayload = new GogsPayload(this.payload);
75+
if (item != null) {
76+
item.scheduleBuild2(0, gogsPayload);
77+
}
78+
} else {
79+
project.scheduleBuild(0, cause);
9880
}
81+
result.setMessage(String.format("Job '%s' is executed", jobName));
82+
} else {
83+
String msg = String.format("Job '%s' is not defined in Jenkins", jobName);
84+
result.setStatus(404, msg);
85+
LOGGER.warning(msg);
9986
}
100-
} catch (RuntimeException e) {
101-
throw e;
10287
} catch (Exception e) {
10388
StringWriter sw = new StringWriter();
10489
PrintWriter pw = new PrintWriter(sw);
@@ -110,4 +95,4 @@ public GogsResults triggerJobs(String jobName, String deliveryID) {
11095

11196
return result;
11297
}
113-
}
98+
}

src/test/docker/jenkins-dockerfile/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
FROM jenkinsci/jenkins:latest
22

33
# Load the required dependencies for the plugin under test
4-
RUN /usr/local/bin/install-plugins.sh git workflow-aggregator pipeline-model-extensions
4+
RUN /usr/local/bin/install-plugins.sh git workflow-aggregator pipeline-model-extensions cloudbees-folder
55

66
# Copy the newly built plugin in the container so that it gets loaded at startup
77
ADD gogs-webhook.hpi /usr/share/jenkins/ref/plugins/gogs-webhook.hpi
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.jenkinsci.plugins.gogs;
2+
3+
import com.cloudbees.hudson.plugins.folder.Folder;
4+
import hudson.model.FreeStyleProject;
5+
import hudson.model.Job;
6+
import org.junit.Rule;
7+
import org.junit.Test;
8+
import org.jvnet.hudson.test.JenkinsRule;
9+
import org.slf4j.Logger;
10+
import org.slf4j.LoggerFactory;
11+
12+
import java.io.IOException;
13+
14+
import static org.junit.Assert.assertEquals;
15+
16+
/*
17+
* Class to test gogs webhook in cooperation with other plugins
18+
*/
19+
public class GogsWebHookPluginsTest {
20+
private final String FOLDERNAME = "testFolder";
21+
private final String PROJECTNAME = "testProject";
22+
23+
final Logger log = LoggerFactory.getLogger(GogsWebHookPluginsTest.class);
24+
25+
@Rule
26+
public JenkinsRule r = new JenkinsRule();
27+
28+
@Test
29+
public void testCloudBeesFolder() throws Exception {
30+
Folder folder = createFolder(FOLDERNAME);
31+
32+
FreeStyleProject project = folder.createProject(FreeStyleProject.class, PROJECTNAME);
33+
34+
Job job = GogsUtils.find(FOLDERNAME + "/" + PROJECTNAME, Job.class);
35+
assertEquals("Couldn't find " + FOLDERNAME + "/" + PROJECTNAME, job, project);
36+
}
37+
38+
//
39+
// Helper methods
40+
//
41+
private Folder createFolder(String folder) throws IOException {
42+
return r.jenkins.createProject(Folder.class, folder);
43+
}
44+
45+
}

0 commit comments

Comments
 (0)