package org.jenkinsci.plugins.p4.trigger; import hudson.Extension; import hudson.model.UnprotectedRootAction; import hudson.model.Job; import hudson.triggers.Trigger; import java.io.IOException; import java.net.URLDecoder; import java.util.logging.Logger; import javax.servlet.ServletException; import jenkins.model.Jenkins; import jenkins.model.ParameterizedJobMixIn; import net.sf.json.JSONObject; import org.apache.commons.io.IOUtils; import org.kohsuke.stapler.StaplerRequest; import org.kohsuke.stapler.StaplerResponse; @Extension public class P4Hook implements UnprotectedRootAction { // https://github.com/jenkinsci/bitbucket-plugin @Override public String getIconFileName() { return "/plugin/p4/icons/p4.png"; } @Override public String getDisplayName() { return "P4 Trigger"; } @Override public String getUrlName() { return "p4"; } public void doChange(StaplerRequest req) throws IOException { String body = IOUtils.toString(req.getInputStream()); String contentType = req.getContentType(); if (contentType != null && contentType.startsWith("application/json")) { body = URLDecoder.decode(body, "UTF-8"); } if (body.startsWith("payload=")) { body = body.substring(8); JSONObject payload = JSONObject.fromObject(body); String port = payload.getString("p4port"); String change = payload.getString("change"); LOGGER.info("Received trigger event: " + body); probeJobs(port, change); } } public void doChangeSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException { JSONObject formData = req.getSubmittedForm(); if (!formData.isEmpty()) { String change = req.getParameter("_.change"); String port = req.getParameter("_.p4port"); LOGGER.info("Manual trigger event: "); probeJobs(port, change); // send the user back. rsp.sendRedirect("../"); } } private void probeJobs(String port, String change) throws IOException { Jenkins j = Jenkins.getInstance(); if(j == null) { LOGGER.warning("Jenkins instance is null."); return; } for (Job<?, ?> job : j.getAllItems(Job.class)) { P4Trigger trigger = null; LOGGER.fine("P4: trying: " + job.getName()); if (job instanceof ParameterizedJobMixIn.ParameterizedJob) { ParameterizedJobMixIn.ParameterizedJob pJob = (ParameterizedJobMixIn.ParameterizedJob) job; for (Trigger<?> t : pJob.getTriggers().values()) { if (t instanceof P4Trigger) { trigger = (P4Trigger) t; break; } } } if (trigger != null) { LOGGER.info("P4: probing: " + job.getName()); trigger.poke(job, port); } else { LOGGER.fine("P4: trigger not set: " + job.getName()); } } } final static Logger LOGGER = Logger.getLogger(P4Hook.class.getName()); }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#19 | 26356 | matthew_smeeth |
Reverting job list to original pre 1.10.10 release. JENKINS-61156 |
||
#18 | 26352 | Paul Allen | [SECURITY-1765] | ||
#17 | 26294 | Paul Allen |
Merge pull request #116 from ajxb/ajb-trigger Get list of jobs immediately prior to probing |
||
#16 | 24622 | Paul Allen | Added 'command-launcher' for Jenkins 2.89.1 release and greater. | ||
#15 | 24529 | Paul Allen |
Swarm Commit Event support, refactoring and test. JENKINS-52605 (Fix doc in 'Includes' help bubble for MultiBranch) JENKINS-52066 (Improve Swarm Commit and Branch Event support) |
||
#14 | 24501 | Paul Allen | Refactor to use P4SCMXxx naming convention. | ||
#13 | 24492 | Paul Allen |
Initial work for MultiBranch Event trigger. JENKINS-52066 (Triggered Events and not Polling per change) |
||
#12 | 24488 | Paul Allen |
Min version Jenkins 2.60.3 Upgrade dependencies and move to Java 8. |
||
#11 | 24029 | Paul Allen |
Merge pull request #71 from AllegorithmicSAS/CrumbExclusion Add CrumbExclusion for /p4/change |
||
#10 | 23858 | Paul Allen |
Skip probing disabled Jobs. Includes minor updates to Polling tests. JENKINS-50634 |
||
#9 | 23258 | Paul Allen | Clean up a few minor warnings. | ||
#8 | 22823 | Paul Allen |
Update URLs in README. Minor find bug fix. |
||
#7 | 22822 | Paul Allen |
Pipeline trigger fixes for Graph. Fetch JobList outside ExecutorService. |
||
#6 | 22166 | Paul Allen | Brand update. | ||
#5 | 21272 | Paul Allen |
Use ExecutorService to prevent blocking during polling task. JENKINS-39278 JENKINS-39152 |
||
#4 | 19641 | Paul Allen |
Merge pull request #26 from Dohbedoh/hotfix/JENKINS-25249 [JENKINS-25249]: Fixed Null Pointer dereference |
||
#3 | 19593 | Paul Allen | More minor fixes to satisfy FindBugs Analysis. | ||
#2 | 19294 | Paul Allen |
Schedule build on trigger for subscribed Jobs. JENKINS-33858 |
||
#1 | 15403 | Paul Allen |
Perforce triggered polling BETA. Perforce triggers on a change-submit and sends a POST to the endpoint http://${JENKINS}/p4/change with the data: {"change":"12345","p4port":"localhost:1666"} Note: ‘change’ is not used (yet), but ‘p4port’ MUST match the credential in the Jenkins Job. JENKINS-25249 |