Class Node
- java.lang.Object
-
- hudson.model.AbstractModelObject
-
- hudson.model.Node
-
- All Implemented Interfaces:
ExtensionPoint,Describable<Node>,ModelObject,PersistenceRoot,ReconfigurableDescribable<Node>,Saveable,SearchableModelObject,SearchItem,AccessControlled,OnMaster
- Direct Known Subclasses:
AbstractCIBase,Slave
@ExportedBean public abstract class Node extends AbstractModelObject implements ReconfigurableDescribable<Node>, ExtensionPoint, AccessControlled, OnMaster, PersistenceRoot
Base type of Jenkins agents (although in practice, you probably extendSlaveto define a new agent type).As a special case,
Jenkinsextends from here.Nodes are persisted objects that capture user configurations, and instances get thrown away and recreated whenever the configuration changes. Running state of nodes are captured by
Computers.There is no URL binding for
Node.ComputerandTransientComputerActionFactorymust be used to associate newActions to agents.- Author:
- Kohsuke Kawaguchi
- See Also:
NodeDescriptor,Computer
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classNode.InternalComputerListenerLet Nodes be aware of the lifecycle of their ownComputer.static classNode.ModeConstants that control how Hudson allocates jobs to agents.-
Nested classes/interfaces inherited from interface hudson.ExtensionPoint
ExtensionPoint.LegacyInstancesAreScopedToHudson
-
-
Field Summary
Fields Modifier and Type Field Description protected booleanholdOffLaunchUntilSaveNewly copied agents get this flag set, so that Jenkins doesn't try to start/remove this node until its configuration is saved once.static booleanSKIP_BUILD_CHECK_ON_FLYWEIGHTS
-
Constructor Summary
Constructors Constructor Description Node()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description CauseOfBlockagecanTake(Queue.BuildableItem item)Called by theQueueto determine whether or not this node can take the given task.CauseOfBlockagecanTake(Queue.Task task)Deprecated.as of 1.413 UsecanTake(Queue.BuildableItem)protected abstract ComputercreateComputer()abstract LaunchercreateLauncher(TaskListener listener)Returns aLauncherfor executing programs on this node.FilePathcreatePath(String absolutePath)Gets theFilePathon this node.ACLgetACL()Obtains the ACL associated with this object.Set<LabelAtom>getAssignedLabels()Returns the possibly empty set of labels that are assigned to this node, including the automaticself label, manually assigned labels and dynamically assigned labels via theLabelFinderextension point.hudson.remoting.VirtualChannelgetChannel()Gets the current channel, if the node is connected and online, or null.ClockDifferencegetClockDifference()Estimates the clock difference with this agent.abstract hudson.remoting.Callable<ClockDifference,IOException>getClockDifferenceCallable()Returns aCallablethat when run on the channel, estimates the clock difference.protected XmlFilegetConfigFile()abstract NodeDescriptorgetDescriptor()Gets the descriptor for this instance.StringgetDisplayName()FileSystemProvisionergetFileSystemProvisioner()Deprecated.protected Set<LabelAtom>getLabelAtomSet()TagCloud<LabelAtom>getLabelCloud()Return the possibly empty tag cloud for the labels of this node.abstract StringgetLabelString()Returns the manually configured label for a node.abstract Node.ModegetMode()ReturnsNode.Mode.EXCLUSIVEif this node is only available for those jobs that exclusively specifies this node as the assigned node.abstract StringgetNodeDescription()Human-readable description of this node.abstract StringgetNodeName()Name of this node.abstract DescribableList<NodeProperty<?>,NodePropertyDescriptor>getNodeProperties()Gets theNodePropertyinstances configured for thisNode.<T extends NodeProperty>
TgetNodeProperty(Class<T> clazz)Gets the specified property or null if the property is not configured for this Node.NodePropertygetNodeProperty(String className)Gets the property from the given classname or null if the property is not configured for this Node.List<NodePropertyDescriptor>getNodePropertyDescriptors()abstract intgetNumExecutors()Returns the number ofExecutors.FilegetRootDir()Gets the root directory on the file system that thisItemcan use freely for storing the configuration data.abstract FilePathgetRootPath()Gets the root directory of this node.StringgetSearchUrl()Returns the URL of this item relative to the parentSearchItem.LabelAtomgetSelfLabel()Gets the special label that represents this node itself.OfflineCausegetTemporaryOfflineCause()Get the cause if temporary offline.abstract FilePathgetWorkspaceFor(TopLevelItem item)Returns a "workspace" directory for the givenTopLevelItem.booleanisAcceptingTasks()Returnstrueif the node is accepting tasks.booleanisHoldOffLaunchUntilSave()voidonLoad(Nodes parent, String name)Nodereconfigure(org.kohsuke.stapler.StaplerRequest req, net.sf.json.JSONObject form)When a parent/owner object of a Describable gets a config form submission and instances are recreated, this method is invoked on the existing instance (meaning the 'this' reference points to the existing instance) to create a new instance to be added to the parent/owner object.voidsave()Persists the state of this object into XML.voidsetLabelString(String labelString)Sets the label string for a node.abstract voidsetNodeName(String name)Deprecated.to indicate that this method isn't really meant to be called by random code.ComputertoComputer()Gets the correspondingComputerobject.-
Methods inherited from class hudson.model.AbstractModelObject
getSearch, getSearchIndex, getSearchName, makeSearchIndex, requirePOST, sendError, sendError, sendError, sendError, sendError
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface hudson.security.AccessControlled
checkAnyPermission, checkPermission, hasAnyPermission, hasPermission, hasPermission, hasPermission2
-
-
-
-
Field Detail
-
SKIP_BUILD_CHECK_ON_FLYWEIGHTS
public static boolean SKIP_BUILD_CHECK_ON_FLYWEIGHTS
- See Also:
- JENKINS-46652
-
holdOffLaunchUntilSave
protected transient volatile boolean holdOffLaunchUntilSave
Newly copied agents get this flag set, so that Jenkins doesn't try to start/remove this node until its configuration is saved once.
-
-
Method Detail
-
getDisplayName
public String getDisplayName()
- Specified by:
getDisplayNamein interfaceModelObject
-
getSearchUrl
public String getSearchUrl()
Description copied from interface:SearchItemReturns the URL of this item relative to the parentSearchItem.- Specified by:
getSearchUrlin interfaceSearchItem- Returns:
- URL like "foo" or "foo/bar". The path can end with '/'. The path that starts with '/' will be interpreted as the absolute path (within the context path of Jenkins.)
-
isHoldOffLaunchUntilSave
public boolean isHoldOffLaunchUntilSave()
-
save
public void save() throws IOExceptionDescription copied from interface:SaveablePersists the state of this object into XML.For making a bulk change efficiently, see
BulkChange.To support listeners monitoring changes to this object, call
SaveableListener.fireOnChange(hudson.model.Saveable, hudson.XmlFile)- Specified by:
savein interfaceSaveable- Throws:
IOException- if the persistence failed.- Since:
- 1.635.
-
getConfigFile
protected XmlFile getConfigFile()
-
getNodeName
@Exported(visibility=999) @NonNull public abstract String getNodeName()
Name of this node.- Returns:
- "" if this is master
-
setNodeName
@Deprecated public abstract void setNodeName(String name)
Deprecated.to indicate that this method isn't really meant to be called by random code.
-
getNodeDescription
@Exported public abstract String getNodeDescription()
Human-readable description of this node.
-
createLauncher
public abstract Launcher createLauncher(TaskListener listener)
Returns aLauncherfor executing programs on this node.The callee must call
Launcher.decorateFor(Node)before returning to complete the decoration.
-
getNumExecutors
@Exported public abstract int getNumExecutors()
Returns the number ofExecutors. This may be different fromgetExecutors().size()because it takes time to adjust the number of executors.
-
getMode
@Exported public abstract Node.Mode getMode()
ReturnsNode.Mode.EXCLUSIVEif this node is only available for those jobs that exclusively specifies this node as the assigned node.
-
toComputer
@CheckForNull public final Computer toComputer()
Gets the correspondingComputerobject.- Returns:
- this method can return null if there's no
Computerobject for this node, such as when this node has no executors at all.
-
getChannel
@CheckForNull public final hudson.remoting.VirtualChannel getChannel()
Gets the current channel, if the node is connected and online, or null. This is just a convenience method forComputer.getChannel()with null check.
-
createComputer
@CheckForNull @Restricted(org.kohsuke.accmod.restrictions.ProtectedExternally.class) protected abstract Computer createComputer()
Creates a newComputerobject that acts as the UI peer of thisNode. Nobody butJenkins.updateComputerList()should call this method.
-
isAcceptingTasks
public boolean isAcceptingTasks()
Returnstrueif the node is accepting tasks. Needed to allow agents programmatic suspension of task scheduling that does not overlap with being offline. Called byComputer.isAcceptingTasks(). This method is distinct fromComputer.isAcceptingTasks()as sometimes theNodeconcrete class may not have control over theComputerconcrete class associated with it.- Returns:
trueif the node is accepting tasks.- Since:
- 1.586
- See Also:
Computer.isAcceptingTasks()
-
getTemporaryOfflineCause
public OfflineCause getTemporaryOfflineCause()
Get the cause if temporary offline.- Returns:
- null if not temporary offline or there was no cause given.
- Since:
- 2.340
-
getLabelCloud
public TagCloud<LabelAtom> getLabelCloud()
Return the possibly empty tag cloud for the labels of this node.
-
getLabelAtomSet
@NonNull @Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) protected Set<LabelAtom> getLabelAtomSet()
- Returns:
- An immutable set of LabelAtom associated with the current node label.
-
getAssignedLabels
@Exported public Set<LabelAtom> getAssignedLabels()
Returns the possibly empty set of labels that are assigned to this node, including the automaticself label, manually assigned labels and dynamically assigned labels via theLabelFinderextension point. This method has a side effect of updating the hudson-wide set of labels and should be called after events that will change that - e.g. an agent connecting.
-
getLabelString
public abstract String getLabelString()
Returns the manually configured label for a node. The list of assigned and dynamically determined labels is available viagetAssignedLabels()and includes all labels that have been manually configured. Mainly for form binding.
-
setLabelString
public void setLabelString(String labelString) throws IOException
Sets the label string for a node. This value will be returned bygetLabelString().- Parameters:
labelString- The new label string to use.- Throws:
IOException- Since:
- 1.477
-
getSelfLabel
@NonNull @WithBridgeMethods(Label.class) public LabelAtom getSelfLabel()
Gets the special label that represents this node itself.
-
canTake
@Deprecated public CauseOfBlockage canTake(Queue.Task task)
Deprecated.as of 1.413 UsecanTake(Queue.BuildableItem)Called by theQueueto determine whether or not this node can take the given task. The default checks include whether or not this node is part of the task's assigned label, whether this node is inNode.Mode.EXCLUSIVEmode if it is not in the task's assigned label, and whether or not any of this node'sNodePropertys say that the task cannot be run.- Since:
- 1.360
-
canTake
public CauseOfBlockage canTake(Queue.BuildableItem item)
Called by theQueueto determine whether or not this node can take the given task. The default checks include whether or not this node is part of the task's assigned label, whether this node is inNode.Mode.EXCLUSIVEmode if it is not in the task's assigned label, and whether or not any of this node'sNodePropertys say that the task cannot be run.- Since:
- 1.413
-
getWorkspaceFor
@CheckForNull public abstract FilePath getWorkspaceFor(TopLevelItem item)
Returns a "workspace" directory for the givenTopLevelItem.Workspace directory is usually used for keeping out the checked out source code, but it can be used for anything.
- Returns:
- null if this node is not connected hence the path is not available
-
getRootPath
@CheckForNull public abstract FilePath getRootPath()
Gets the root directory of this node.Hudson always owns a directory on every node. This method returns that.
- Returns:
- null if the node is offline and hence the
FilePathobject is not available.
-
createPath
@CheckForNull public FilePath createPath(String absolutePath)
Gets theFilePathon this node.
-
getFileSystemProvisioner
@Deprecated public FileSystemProvisioner getFileSystemProvisioner()
Deprecated.
-
getNodeProperties
@NonNull public abstract DescribableList<NodeProperty<?>,NodePropertyDescriptor> getNodeProperties()
Gets theNodePropertyinstances configured for thisNode.
-
getNodeProperty
@CheckForNull public <T extends NodeProperty> T getNodeProperty(Class<T> clazz)
Gets the specified property or null if the property is not configured for this Node.- Parameters:
clazz- the type of the property- Returns:
- null if the property is not configured
- Since:
- 2.37
-
getNodeProperty
@CheckForNull public NodeProperty getNodeProperty(String className)
Gets the property from the given classname or null if the property is not configured for this Node.- Parameters:
className- The classname of the property- Returns:
- null if the property is not configured
- Since:
- 2.37
-
getNodePropertyDescriptors
public List<NodePropertyDescriptor> getNodePropertyDescriptors()
-
getACL
@NonNull public ACL getACL()
Description copied from interface:AccessControlledObtains the ACL associated with this object.- Specified by:
getACLin interfaceAccessControlled- Returns:
- never null.
-
reconfigure
public Node reconfigure(@NonNull org.kohsuke.stapler.StaplerRequest req, net.sf.json.JSONObject form) throws Descriptor.FormException
Description copied from interface:ReconfigurableDescribableWhen a parent/owner object of a Describable gets a config form submission and instances are recreated, this method is invoked on the existing instance (meaning the 'this' reference points to the existing instance) to create a new instance to be added to the parent/owner object.The default implementation of this should be the following:
return form==null ? null : getDescriptor().newInstance(req, form);
- Specified by:
reconfigurein interfaceReconfigurableDescribable<Node>- Parameters:
req- The current HTTP request being processed.form- JSON fragment that corresponds to this describable object. If the newly submitted form doesn't include a fragment for this describable (meaning the user has de-selected your descriptor), then this argument is null.- Returns:
- The new instance. To not to create an instance of a describable, return null.
- Throws:
Descriptor.FormException
-
getDescriptor
public abstract NodeDescriptor getDescriptor()
Description copied from interface:DescribableGets the descriptor for this instance.Descriptoris a singleton for every concreteDescribableimplementation, so ifa.getClass() == b.getClass()then by defaulta.getDescriptor() == b.getDescriptor()as well. (In rare cases a single implementation class may be used for instances with distinct descriptors.)- Specified by:
getDescriptorin interfaceDescribable<Node>
-
getClockDifference
public ClockDifference getClockDifference() throws IOException, InterruptedException
Estimates the clock difference with this agent.- Returns:
- always non-null.
- Throws:
InterruptedException- if the operation is aborted.IOException
-
getClockDifferenceCallable
public abstract hudson.remoting.Callable<ClockDifference,IOException> getClockDifferenceCallable()
Returns aCallablethat when run on the channel, estimates the clock difference.- Returns:
- always non-null.
- Since:
- 1.522
-
getRootDir
public File getRootDir()
Description copied from interface:PersistenceRootGets the root directory on the file system that thisItemcan use freely for storing the configuration data.This parameter is given by the
ItemGroupwhenItemis loaded from memory.- Specified by:
getRootDirin interfacePersistenceRoot
-
-