diff options
author | Trygve Laugstøl <trygvis@inamo.no> | 2014-05-02 18:26:50 +0200 |
---|---|---|
committer | Trygve Laugstøl <trygvis@inamo.no> | 2014-05-02 18:26:50 +0200 |
commit | 345c0d8f7738aab20d2b45fd6c5ebf911b75e2fa (patch) | |
tree | 0ee3919571bab4c92d9ed306c671b879db9b12ff /src | |
download | activemq-plugin-345c0d8f7738aab20d2b45fd6c5ebf911b75e2fa.tar.gz activemq-plugin-345c0d8f7738aab20d2b45fd6c5ebf911b75e2fa.tar.bz2 activemq-plugin-345c0d8f7738aab20d2b45fd6c5ebf911b75e2fa.tar.xz activemq-plugin-345c0d8f7738aab20d2b45fd6c5ebf911b75e2fa.zip |
o Initial import of ActiveMQ plugin for Jenkins.
Diffstat (limited to 'src')
8 files changed, 200 insertions, 0 deletions
diff --git a/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqClient.java b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqClient.java new file mode 100644 index 0000000..a40f3e6 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqClient.java @@ -0,0 +1,55 @@ +package org.jenkinsci.plugins.activemq; + +import org.apache.activemq.ActiveMQConnectionFactory; + +import javax.jms.Connection; +import javax.jms.DeliveryMode; +import javax.jms.Destination; +import javax.jms.JMSException; +import javax.jms.MessageProducer; +import javax.jms.Session; +import java.io.CharArrayWriter; +import java.io.IOException; +import java.util.Properties; + +import static java.lang.String.valueOf; +import static javax.jms.Session.AUTO_ACKNOWLEDGE; + +public class ActiveMqClient { + + ActiveMQConnectionFactory connectionFactory; + + public ActiveMqClient(String brokerUrl) { + this.connectionFactory = new ActiveMQConnectionFactory(brokerUrl); + } + + public void sendMessage(String jobName, int buildNumber, String result) { + try { + Connection connection = connectionFactory.createConnection(); + connection.start(); + + Session session = connection.createSession(false, AUTO_ACKNOWLEDGE); + + Destination destination = session.createQueue("jenkins.build-result"); + + MessageProducer producer = session.createProducer(destination); + producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + + Properties properties = new Properties(); + properties.setProperty("jobName", jobName); + properties.setProperty("buildNumber", valueOf(buildNumber)); + properties.setProperty("result", result); + + CharArrayWriter buf = new CharArrayWriter(); + properties.store(buf, null); + producer.send(session.createTextMessage(buf.toString())); + + session.close(); + connection.close(); + } catch (JMSException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqPlugin.java b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqPlugin.java new file mode 100644 index 0000000..74f3504 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqPlugin.java @@ -0,0 +1,57 @@ +package org.jenkinsci.plugins.activemq; + +import hudson.Plugin; +import hudson.model.Descriptor; +import hudson.util.FormValidation; +import net.sf.json.JSONObject; +import org.kohsuke.stapler.QueryParameter; +import org.kohsuke.stapler.StaplerRequest; +import org.slf4j.Logger; + +import javax.servlet.ServletException; +import java.io.IOException; + +import static org.slf4j.LoggerFactory.getLogger; + +public class ActiveMqPlugin extends Plugin { + + private final Logger logger = getLogger(getClass()); + + public static final String DISPLAY_NAME = "ActiveMQ Plugin"; + + private boolean enable; + + private String brokerUrl = "tcp://127.0.0.1:61616"; + + @Override + public void start() throws Exception { + load(); + } + + @Override + public void configure(StaplerRequest req, JSONObject formData) throws IOException, ServletException, Descriptor.FormException { + brokerUrl = formData.getString("brokerUrl"); + enable = formData.getBoolean("enable"); + + System.out.println("brokerUrl = " + brokerUrl); + + save(); + } + + public FormValidation doCheckBrokerUrl(@QueryParameter String activeMqUrl) { + System.out.println("ActiveMqPlugin.doCheckActiveMqUrl"); + + return FormValidation.error("wat"); + } + + public String getBrokerUrl() { + System.out.println("ActiveMqPlugin.getBrokerUrl"); + return brokerUrl; + } + + public void setBrokerUrl(String brokerUrl) { + System.out.println("ActiveMqPlugin.setBrokerUrl"); + System.out.println("brokerUrl = " + brokerUrl); + this.brokerUrl = brokerUrl; + } +} diff --git a/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqRunListener.java b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqRunListener.java new file mode 100644 index 0000000..62a2673 --- /dev/null +++ b/src/main/java/org/jenkinsci/plugins/activemq/ActiveMqRunListener.java @@ -0,0 +1,42 @@ +package org.jenkinsci.plugins.activemq; + +import hudson.Extension; +import hudson.model.Build; +import hudson.model.TaskListener; +import hudson.model.listeners.RunListener; + +import javax.annotation.Nonnull; + +@Extension +public class ActiveMqRunListener extends RunListener<Build> { + + private final ActiveMqClient activeMqClient; + + public ActiveMqRunListener() { + super(Build.class); + + System.out.println("JbpmRunListener.JbpmRunListener"); + + activeMqClient = new ActiveMqClient("tcp://localhost:61616"); + } + + @Override + public void onCompleted(Build build, @Nonnull TaskListener listener) { + System.out.println("JbpmRunListener.onCompleted"); + System.out.println("build = " + build); + + System.out.println("build variables"); + for (Object o : build.getBuildVariables().entrySet()) { + System.out.println(o); + } + + activeMqClient.sendMessage(build.getProject().getName(), build.getNumber(), build.getResult().toString()); + +// Jenkins jenkins = Jenkins.getInstance(); +// List<AbstractProject> projects = jenkins.getAllItems(AbstractProject.class); +// for (AbstractProject project : projects) { +// System.out.println("project.getPronoun() = " + project.getPronoun()); +// System.out.println("project.getName() = " + project.getName()); +// } + } +} diff --git a/src/main/resources/index.jelly b/src/main/resources/index.jelly new file mode 100644 index 0000000..7692983 --- /dev/null +++ b/src/main/resources/index.jelly @@ -0,0 +1,3 @@ +<div> + Send events to an ActiveMQ server. +</div> diff --git a/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/config.jelly b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/config.jelly new file mode 100644 index 0000000..879ae01 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/config.jelly @@ -0,0 +1,10 @@ +<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"> + <f:section title="ActiveMQ Plugin"> + <f:entry field="enable" title="Enable"> + <f:checkbox/> + </f:entry> + <f:entry field="brokerUrl" title="ActiveMQ URL" description="For example tcp://127.0.0.1:61616"> + <f:textbox/> + </f:entry> + </f:section> +</j:jelly> diff --git a/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/global.jelly b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/global.jelly new file mode 100644 index 0000000..6da81e0 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/global.jelly @@ -0,0 +1,21 @@ +<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define" xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form"> + <!-- + This Jelly script is used to produce the global configuration option. + + Jenkins uses a set of tag libraries to provide uniformity in forms. + To determine where this tag is defined, first check the namespace URI, + and then look under $JENKINS/views/. For example, <f:section> is defined + in $JENKINS/views/lib/form/section.jelly. + + It's also often useful to just check other similar scripts to see what + tags they use. Views are always organized according to its owner class, + so it should be straightforward to find them. + --> +<!-- + <f:section title="ActiveMQ Plugin"> + <f:entry title="ActiveMq URL" field="brokerUrl" description="yeah yeah"> + <f:textbox/> + </f:entry> + </f:section> +--> +</j:jelly> diff --git a/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-activeMqUrl.html b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-activeMqUrl.html new file mode 100644 index 0000000..df2e815 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-activeMqUrl.html @@ -0,0 +1,6 @@ +<div> + This HTML fragment will be injected into the configuration screen + when the user clicks the 'help' icon. See global.jelly for how the + form decides which page to load. + You can have any <tt>HTML</tt> fragment here. +</div> diff --git a/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-name.html b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-name.html new file mode 100644 index 0000000..288f214 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/activemq/ActiveMqPlugin/help-name.html @@ -0,0 +1,6 @@ +<div> + Help file for fields are discovered through a file name convention. This file is + help for the "name" field. You can have <i>arbitrary</i> HTML here. You can write + this file as a Jelly script if you need a dynamic content (but if you do so, change + the extension to <tt>.jelly</tt>). +</div> |