Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion about_integration_tests.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ Note that either for Jenkins and Gogs, the test is based on the LATEST version (

#### The Jenkins Docker Image

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).
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).
The previously built plugin hpi is copied in the container so that it will automatically be loaded at startup.
The password credential for Gogs is loaded in the Jenkins container with the `setup-gogs-user-credentials.groovy.override` groovy script (executed at startup).
It is hardcoded in the script to user "butler" with password "butler".
Expand Down
8 changes: 7 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
<jenkins.version>1.625.3</jenkins.version>
<java.level>7</java.level>
<jenkins-test-harness.version>2.13</jenkins-test-harness.version>

<java.level.test>8</java.level.test>
</properties>

<name>Jenkins Gogs plugin</name>
Expand Down Expand Up @@ -103,6 +103,12 @@
<version>0.3.7</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>cloudbees-folder</artifactId>
<version>6.3</version>
<scope>test</scope>
</dependency>
</dependencies>

<profiles>
Expand Down
67 changes: 26 additions & 41 deletions src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ associated documentation files (the "Software"), to deal in the Software without
import hudson.model.Cause;
import hudson.security.ACL;
import hudson.triggers.Trigger;
import jenkins.model.Jenkins;
import jenkins.model.ParameterizedJobMixIn;
import jenkins.triggers.SCMTriggerItem;
import org.acegisecurity.context.SecurityContext;
Expand All @@ -46,59 +45,45 @@ class GogsPayloadProcessor {
GogsPayloadProcessor() {
}

@SuppressWarnings("unused")
public Map<String, String> getPayload() {
return this.payload;
}

public void setPayload(String k, String v) {
this.payload.put(k, v);
}

public GogsResults triggerJobs(String jobName, String deliveryID) {
SecurityContext saveCtx = ACL.impersonate(ACL.SYSTEM);
Boolean didJob = false;
GogsResults result = new GogsResults();

try {
Jenkins instance = Jenkins.getInstance();
if (instance != null) {
for (BuildableItem project : instance.getAllItems(BuildableItem.class)) {
if (project.getName().equals(jobName)) {

GogsTrigger gTrigger = null;
Cause cause = new GogsCause(deliveryID);

if (project instanceof ParameterizedJobMixIn.ParameterizedJob) {
ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) project;
for (Trigger trigger : pJob.getTriggers().values()) {
if (trigger instanceof GogsTrigger) {
gTrigger = (GogsTrigger) trigger;
break;
}
}
BuildableItem project = GogsUtils.find(jobName, BuildableItem.class);
if (project != null) {
GogsTrigger gTrigger = null;
Cause cause = new GogsCause(deliveryID);

if (project instanceof ParameterizedJobMixIn.ParameterizedJob) {
ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) project;
for (Trigger trigger : pJob.getTriggers().values()) {
if (trigger instanceof GogsTrigger) {
gTrigger = (GogsTrigger) trigger;
break;
}
if (gTrigger != null) {
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
GogsPayload gogsPayload = new GogsPayload(this.payload);

if (item != null)
item.scheduleBuild2(0, gogsPayload);
} else
project.scheduleBuild(0, cause);

didJob = true;
result.setMessage(String.format("Job '%s' is executed", jobName));
}
}
if (!didJob) {
String msg = String.format("Job '%s' is not defined in Jenkins", jobName);
result.setStatus(404, msg);
LOGGER.warning(msg);

if (gTrigger != null) {
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
GogsPayload gogsPayload = new GogsPayload(this.payload);
if (item != null) {
item.scheduleBuild2(0, gogsPayload);
}
} else {
project.scheduleBuild(0, cause);
}
result.setMessage(String.format("Job '%s' is executed", jobName));
} else {
String msg = String.format("Job '%s' is not defined in Jenkins", jobName);
result.setStatus(404, msg);
LOGGER.warning(msg);
}
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
Expand All @@ -110,4 +95,4 @@ public GogsResults triggerJobs(String jobName, String deliveryID) {

return result;
}
}
}
2 changes: 1 addition & 1 deletion src/test/docker/jenkins-dockerfile/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
FROM jenkinsci/jenkins:latest

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

# Copy the newly built plugin in the container so that it gets loaded at startup
ADD gogs-webhook.hpi /usr/share/jenkins/ref/plugins/gogs-webhook.hpi
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.jenkinsci.plugins.gogs;

import com.cloudbees.hudson.plugins.folder.Folder;
import hudson.model.FreeStyleProject;
import hudson.model.Job;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.JenkinsRule;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;

import static org.junit.Assert.assertEquals;

/*
* Class to test gogs webhook in cooperation with other plugins
*/
public class GogsWebHookPluginsTest {
private final String FOLDERNAME = "testFolder";
private final String PROJECTNAME = "testProject";

final Logger log = LoggerFactory.getLogger(GogsWebHookPluginsTest.class);

@Rule
public JenkinsRule r = new JenkinsRule();

@Test
public void testCloudBeesFolder() throws Exception {
Folder folder = createFolder(FOLDERNAME);

FreeStyleProject project = folder.createProject(FreeStyleProject.class, PROJECTNAME);

Job job = GogsUtils.find(FOLDERNAME + "/" + PROJECTNAME, Job.class);
assertEquals("Couldn't find " + FOLDERNAME + "/" + PROJECTNAME, job, project);
}

//
// Helper methods
//
private Folder createFolder(String folder) throws IOException {
return r.jenkins.createProject(Folder.class, folder);
}

}