All Downloads are FREE. Search and download functionalities are using the official Maven repository.

hudson.tasks.Publisher Maven / Gradle / Ivy

The newest version!
/*******************************************************************************
 *
 * Copyright (c) 2004-2009 Oracle Corporation.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors: 
 *
 *    Kohsuke Kawaguchi
 *     
 *
 *******************************************************************************/ 
package hudson.tasks;

import hudson.DescriptorExtensionList;
import hudson.Extension;
import hudson.ExtensionComponent;
import hudson.model.Action;
import hudson.model.Build;
import hudson.model.BuildListener;
import hudson.model.Describable;
import hudson.model.Descriptor;
import hudson.model.Hudson;
import hudson.model.Project;
import hudson.model.Result;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * {@link BuildStep}s that run after the build is completed.
 *
 * 

* To register a custom {@link Publisher} from a plugin, * put {@link Extension} on your descriptor implementation. * *

* Starting 1.178, publishers are exposed to all kinds of different * project type, not just the freestyle project type (in particular, * the native maven2 job type.) This is convenient default for * {@link Publisher}s in particular initially, but we encourage advanced * plugins to consider writing MavenReporter, as it offers the * potential of reducing the amount of configuration needed to run the plugin. * * For those plugins that don't want {@link Publisher} to show up in * different job type, use {@link BuildStepDescriptor} for the base type * of your descriptor to control which job type it supports. * * @author Kohsuke Kawaguchi, Anton Kozak */ public abstract class Publisher extends BuildStepCompatibilityLayer implements BuildStep, Describable { /** * @deprecated * Don't extend from {@link Publisher} directly. Instead, choose {@link Recorder} or {@link Notifier} * as your base class. */ @Deprecated protected Publisher() { } // // these two methods need to remain to keep binary compatibility with plugins built with Hudson < 1.150 // /** * Default implementation that does nothing. * @deprecated since 1.150 */ @Deprecated @Override public boolean prebuild(Build build, BuildListener listener) { return true; } /** * Default implementation that does nothing. * @deprecated since 1.150 */ @Deprecated @Override public Action getProjectAction(Project project) { return null; } /** * Return true if this {@link Publisher} needs to run after the build result is * fully finalized. * *

* The execution of normal {@link Publisher}s are considered within a part * of the build. This allows publishers to mark the build as a failure, or * to include their execution time in the total build time. * *

* So normally, that is the preferrable behavior, but in a few cases * this is problematic. One of such cases is when a publisher needs to * trigger other builds, which in turn need to see this build as a * completed build. Those plugins that need to do this can return true * from this method, so that the {@link #perform(AbstractBuild, Launcher, BuildListener)} * method is called after the build is marked as completed. * *

* When {@link Publisher} behaves this way, note that they can no longer * change the build status anymore. * * @author Kohsuke Kawaguchi * @since 1.153 */ public boolean needsToRunAfterFinalized() { return false; } /** * Returns true if this {@link Publisher} needs to run depends on Build {@link Result}. *

* Can be used if execution of {@link Publisher} is not required for some Build {@link Result}, * i.e. ABORTED, FAILED, etc. *

* * @since 2.1.1 */ public boolean needsToRun(Result buildResult) { return true; } public Descriptor getDescriptor() { return Hudson.getInstance().getDescriptorOrDie(getClass()); } /** * {@link Publisher} has a special sort semantics that requires a subtype. * * @see DescriptorExtensionList#createDescriptorList(Hudson, Class) */ public static final class DescriptorExtensionListImpl extends DescriptorExtensionList> implements Comparator>> { public DescriptorExtensionListImpl(Hudson hudson) { super(hudson,Publisher.class); } @Override protected List>> sort(List>> r) { List>> copy = new ArrayList>>(r); Collections.sort(copy,this); return copy; } public int compare(ExtensionComponent> lhs, ExtensionComponent> rhs) { int r = classify(lhs.getInstance())-classify(rhs.getInstance()); if (r!=0) return r; return lhs.compareTo(rhs); } /** * If recorder, return 0, if unknown return 1, if notifier returns 2. * This is used as a sort key. */ private int classify(Descriptor d) { if(d.isSubTypeOf(Recorder.class)) return 0; if(d.isSubTypeOf(Notifier.class)) return 2; // for compatibility, if the descriptor is manually registered in a specific way, detect that. Class kind = PublisherList.KIND.get(d); if(kind==Recorder.class) return 0; if(kind==Notifier.class) return 2; return 1; } } /** * Returns all the registered {@link Publisher} descriptors. */ // for backward compatibility, the signature is not BuildStepDescriptor public static DescriptorExtensionList> all() { return Hudson.getInstance().>getDescriptorList(Publisher.class); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy