-
New Feature
-
Resolution: Fixed
-
Major
-
None
Continuation from JENKINS-7858. Wasn't able to add a comment for some reason.
Email-ext currently does not have a trigger for when a build goes from success to failure. The failure triggers on every failed build however the patch the I'm suggesting will only trigger on the transition.
To add this feature change/add the following files
- hudson/plugins/emailext/EmailExtensionPlugin.java add the lines indicated
/* * The MIT License * * Copyright (c) 2010, kyle.sweeney@valtech.com, Stellar Science Ltd Co, K. R. Walker * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ package hudson.plugins.emailext; import hudson.Plugin; import hudson.plugins.emailext.plugins.ContentBuilder; import hudson.plugins.emailext.plugins.EmailContent; import hudson.plugins.emailext.plugins.EmailTriggerDescriptor; import hudson.plugins.emailext.plugins.content.*; import hudson.plugins.emailext.plugins.trigger.*; import hudson.plugins.emailext.plugins.trigger.FirstFailureTrigger; //add line /** * Entry point of a plugin. * * <p> * There must be one {@link Plugin} class in each plugin. * See javadoc of {@link Plugin} for more about what can be done on this class. * * @author kyle.sweeney@valtech.com */ public class EmailExtensionPlugin extends Plugin { @Override public void start() throws Exception { //We are adding different Content plugins to the list of content types. addEmailContentPlugin(new BuildLogContent()); addEmailContentPlugin(new BuildLogRegexContent()); addEmailContentPlugin(new BuildNumberContent()); addEmailContentPlugin(new BuildStatusContent()); addEmailContentPlugin(new BuildURLContent()); addEmailContentPlugin(new ChangesSinceLastBuildContent()); addEmailContentPlugin(new ChangesSinceLastSuccessfulBuildContent()); addEmailContentPlugin(new ChangesSinceLastUnstableBuildContent()); addEmailContentPlugin(new EnvContent()); addEmailContentPlugin(new FailedTestsContent()); addEmailContentPlugin(new HudsonURLContent()); addEmailContentPlugin(new ProjectNameContent()); addEmailContentPlugin(new ProjectURLContent()); addEmailContentPlugin(new SVNRevisionContent()); addEmailContentPlugin(new CauseContent()); addEmailContentPlugin(new JellyScriptContent()); addEmailTriggerPlugin(PreBuildTrigger.DESCRIPTOR); addEmailTriggerPlugin(FailureTrigger.DESCRIPTOR); addEmailTriggerPlugin(StillFailingTrigger.DESCRIPTOR); addEmailTriggerPlugin(UnstableTrigger.DESCRIPTOR); addEmailTriggerPlugin(StillUnstableTrigger.DESCRIPTOR); addEmailTriggerPlugin(SuccessTrigger.DESCRIPTOR); addEmailTriggerPlugin(FixedTrigger.DESCRIPTOR); addEmailTriggerPlugin(FirstFailureTrigger.DESCRIPTOR); //add line } private void addEmailContentPlugin(EmailContent content) { try { ContentBuilder.addEmailContentType(content); } catch (EmailExtException e) { System.err.println(e.getMessage()); } } private void addEmailTriggerPlugin(EmailTriggerDescriptor trigger) { try { ExtendedEmailPublisher.addEmailTriggerType(trigger); } catch (EmailExtException e) { System.err.println(e.getMessage()); } } }
- Create the file hudson/plugins/emailext/plugins/trigger/FirstFailureTrigger.java with the following code:
package hudson.plugins.emailext.plugins.trigger; import hudson.model.AbstractBuild; import hudson.model.Result; import hudson.plugins.emailext.plugins.EmailTrigger; import hudson.plugins.emailext.plugins.EmailTriggerDescriptor; public class FirstFailureTrigger extends EmailTrigger { public static final String TRIGGER_NAME = "First Failure"; @Override public boolean trigger(AbstractBuild<?,?> build) { Result buildResult = build.getResult(); if (buildResult == Result.FAILURE) { AbstractBuild<?,?> prevBuild = build.getPreviousBuild(); if (prevBuild != null && (prevBuild.getResult() == Result.SUCCESS)) { return true; } } return false; } @Override public EmailTriggerDescriptor getDescriptor() { return DESCRIPTOR; } public static DescriptorImpl DESCRIPTOR = new DescriptorImpl(); public static final class DescriptorImpl extends EmailTriggerDescriptor { public DescriptorImpl() { addTriggerNameToReplace(SuccessTrigger.TRIGGER_NAME); } @Override public String getTriggerName() { return TRIGGER_NAME; } @Override public EmailTrigger newInstance() { return new FirstFailureTrigger(); } @Override public String getHelpText() { return "An email will be sent when the build status changes from \"Successful\" " + "to \"Failure\""; } } @Override public boolean getDefaultSendToDevs() { return true; } @Override public boolean getDefaultSendToList() { return true; } }
Rebuild the source and load into Hudson. You will now have a new option to select first failure trigger.
- duplicates
-
JENKINS-7858 Email-ext trigger for the transition from success to failure
- Closed