From 293a993f56bc9942d0ca9a02b3a9b3dc04e055f9 Mon Sep 17 00:00:00 2001 From: Alexander Verhaar Date: Tue, 13 Mar 2018 23:53:14 +0100 Subject: [PATCH 1/5] Fix 'dirname/jobname' is not defined This will fix issue#34 when CloudBees-folder plugin is used and the plugin can't find the jobname. --- .../plugins/gogs/GogsPayloadProcessor.java | 67 +++++++------------ 1 file changed, 26 insertions(+), 41 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java b/src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java index 0c25b4c..5c7be42 100644 --- a/src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java +++ b/src/main/java/org/jenkinsci/plugins/gogs/GogsPayloadProcessor.java @@ -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; @@ -46,59 +45,45 @@ class GogsPayloadProcessor { GogsPayloadProcessor() { } - @SuppressWarnings("unused") - public Map 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); @@ -110,4 +95,4 @@ public GogsResults triggerJobs(String jobName, String deliveryID) { return result; } -} +} \ No newline at end of file From 4513f19f3998334b50265e9785455e63a16ed22a Mon Sep 17 00:00:00 2001 From: Alexander Verhaar Date: Fri, 16 Mar 2018 00:09:31 +0100 Subject: [PATCH 2/5] Updated documentation --- about_integration_tests.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/about_integration_tests.md b/about_integration_tests.md index 6ba764b..889d305 100644 --- a/about_integration_tests.md +++ b/about_integration_tests.md @@ -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". From 4fcf0763c7bf42dc1d089cc685ab0c1024ebb93d Mon Sep 17 00:00:00 2001 From: Alexander Verhaar Date: Fri, 16 Mar 2018 00:13:51 +0100 Subject: [PATCH 3/5] Include cloudbees-folder plugin for testing --- pom.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b8160cf..0c2488a 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ 1.625.3 7 2.13 - + 8 Jenkins Gogs plugin @@ -103,6 +103,12 @@ 0.3.7 test + + org.jenkins-ci.plugins + cloudbees-folder + 6.3 + test + From b6a807ea35ffca0185eb15fd9d6be387e0d80321 Mon Sep 17 00:00:00 2001 From: Alexander Verhaar Date: Fri, 16 Mar 2018 00:14:53 +0100 Subject: [PATCH 4/5] Install cloudbees-folder into jenkins --- src/test/docker/jenkins-dockerfile/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/docker/jenkins-dockerfile/Dockerfile b/src/test/docker/jenkins-dockerfile/Dockerfile index d768293..8127f39 100644 --- a/src/test/docker/jenkins-dockerfile/Dockerfile +++ b/src/test/docker/jenkins-dockerfile/Dockerfile @@ -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 From aa97a8929d60b2a6d60a5bb94710c8cd8579da70 Mon Sep 17 00:00:00 2001 From: Alexander Verhaar Date: Fri, 16 Mar 2018 00:15:41 +0100 Subject: [PATCH 5/5] New tests for integrations with other plugins This test is written so that we can test cloudbees-folder plugin. --- .../plugins/gogs/GogsWebHookPluginsTest.java | 45 +++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/test/java/org/jenkinsci/plugins/gogs/GogsWebHookPluginsTest.java diff --git a/src/test/java/org/jenkinsci/plugins/gogs/GogsWebHookPluginsTest.java b/src/test/java/org/jenkinsci/plugins/gogs/GogsWebHookPluginsTest.java new file mode 100644 index 0000000..0c1cc02 --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/gogs/GogsWebHookPluginsTest.java @@ -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); + } + +}