Package hudson.slaves
Class SlaveComputer
- java.lang.Object
-
- hudson.model.AbstractModelObject
-
- hudson.model.Actionable
-
- hudson.model.Computer
-
- hudson.slaves.SlaveComputer
-
- All Implemented Interfaces:
ExtensionPoint
,DescriptorByNameOwner
,ExecutorListener
,ModelObject
,SearchableModelObject
,SearchItem
,AccessControlled
,ModelObjectWithContextMenu
,org.kohsuke.stapler.StaplerProxy
- Direct Known Subclasses:
AbstractCloudComputer
public class SlaveComputer extends Computer
- Author:
- Kohsuke Kawaguchi
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class hudson.model.Computer
Computer.DisplayExecutor, Computer.TerminationRequest
-
Nested classes/interfaces inherited from interface hudson.ExtensionPoint
ExtensionPoint.LegacyInstancesAreScopedToHudson
-
Nested classes/interfaces inherited from interface jenkins.model.ModelObjectWithContextMenu
ModelObjectWithContextMenu.ContextMenu, ModelObjectWithContextMenu.ContextMenuVisibility, ModelObjectWithContextMenu.MenuItem, ModelObjectWithContextMenu.MenuItemType
-
-
Field Summary
Fields Modifier and Type Field Description static boolean
ALLOW_UNSUPPORTED_REMOTING_VERSIONS
Escape hatch for allowing connections from agents with unsupported Remoting versions.-
Fields inherited from class hudson.model.Computer
BUILD, CONFIGURE, CONNECT, CREATE, DELETE, DISCONNECT, EXTENDED_READ, EXTENDED_READ_AND_CONNECT, nodeName, offlineCause, PERMISSIONS, SKIP_PERMISSION_CHECK, statusChangeLock, threadPoolForRemoting, transientActions
-
-
Constructor Summary
Constructors Constructor Description SlaveComputer(Slave slave)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected Future<?>
_connect(boolean forceReconnect)
Allows implementing-classes to provide an implementation for the connect method.Future<?>
disconnect(OfflineCause cause)
Disconnect this computer.org.kohsuke.stapler.HttpResponse
doDoDisconnect(String offlineMessage)
org.kohsuke.stapler.HttpResponse
doJenkinsAgentJnlp(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse res)
void
doLaunchSlaveAgent(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp)
IfComputer.getChannel()
==null, attempts to relaunch the agent.org.kohsuke.stapler.HttpResponse
doSlaveAgentJnlp(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse res)
void
doSubmitDescription(org.kohsuke.stapler.StaplerResponse rsp, String description)
Inline editing of descriptionString
getAbsoluteRemoteFs()
Returns the remote FS root absolute path ornull
if the agent is off-line.String
getAbsoluteRemotePath()
Just for restFul api.hudson.remoting.Channel
getChannel()
Gets the channel that can be used to run a program on this computer.static hudson.remoting.VirtualChannel
getChannelToMaster()
Deprecated.UseAgentComputerUtil.getChannelToController()
instead.int
getClassLoadingCount()
ShowsChannel.classLoadingCount
.int
getClassLoadingPrefetchCacheCount()
ShowsChannel.classLoadingPrefetchCacheCount
.long
getClassLoadingTime()
ShowsChannel.classLoadingTime
.Charset
getDefaultCharset()
Gets the default charset of this computer.ComputerLauncher
getDelegatedLauncher()
Return theComputerLauncher
for this SlaveComputer, strips off anyDelegatingComputerLauncher
s orComputerLauncherFilter
s.Map<String,String>
getEnvVarsFull()
Expose real full env vars map from agent for UI presentationString
getIconClassName()
Returns the class name that will be used to lookup the icon.Slave.JnlpJar
getJnlpJars(String fileName)
Deprecated.since 2008-08-18.String
getJnlpMac()
ComputerLauncher
getLauncher()
Return theComputerLauncher
for thisSlaveComputer
.TaskListener
getListener()
Offers a way to write to the log file for this agent.List<LogRecord>
getLogRecords()
Gets the logs recorded by this agent.Slave
getNode()
Returns theNode
that this computer represents.String
getOSDescription()
Get the OS description.int
getResourceLoadingCount()
ShowsChannel.resourceLoadingCount
.long
getResourceLoadingTime()
ShowsChannel.resourceLoadingTime
.RetentionStrategy
getRetentionStrategy()
RetentionStrategy
associated with this computer.String
getSlaveVersion()
Get the agent versionstatic List<SlaveSystemInfo>
getSystemInfoExtensions()
Helper method for Jelly.Object
getTarget()
protected ComputerLauncher
grabLauncher(Node node)
boolean
isAcceptingTasks()
Returnstrue
if the computer is accepting tasks.boolean
isConnecting()
Is aComputer.connect(boolean)
operation in progress?boolean
isJnlpAgent()
Deprecated.since 2008-05-20.boolean
isLaunchSupported()
Returns true if this computer can be launched by Hudson proactively and automatically.Boolean
isUnix()
True if this computer is a Unix machine (as opposed to Windows machine).protected void
kill()
Called byJenkins.updateComputerList()
to notifyComputer
that it will be discarded.OutputStream
openLogFile()
void
setAcceptingTasks(boolean acceptingTasks)
Allows suspension of tasks being accepted by the agent computer.void
setChannel(hudson.remoting.ChannelBuilder cb, hudson.remoting.CommandTransport commandTransport, hudson.remoting.Channel.Listener listener)
Creates aChannel
from the given Channel Builder and Command Transport.void
setChannel(hudson.remoting.Channel channel, OutputStream launchLog, hudson.remoting.Channel.Listener listener)
Sets up the connection through an existing channel.void
setChannel(InputStream in, OutputStream out, TaskListener taskListener, hudson.remoting.Channel.Listener listener)
Creates aChannel
from the given stream and sets that to this agent.void
setChannel(InputStream in, OutputStream out, OutputStream launchLog, hudson.remoting.Channel.Listener listener)
Creates aChannel
from the given stream and sets that to this agent.protected void
setNode(Node node)
void
taskAccepted(Executor executor, Queue.Task task)
Called whenever a task is accepted by an executor.void
taskCompleted(Executor executor, Queue.Task task, long durationMS)
Called whenever a task is completed without any problems by an executor.void
taskCompletedWithProblems(Executor executor, Queue.Task task, long durationMS, Throwable problems)
Called whenever a task is completed with some problems by an executor.void
taskStarted(Executor executor, Queue.Task task)
Called whenever a task is started by an executor.void
tryReconnect()
-
Methods inherited from class hudson.model.Computer
_doScript, addAction, buildEnvironment, cliConnect, cliDisconnect, cliOffline, cliOnline, connect, countBusy, countExecutors, countIdle, currentComputer, disconnect, doChangeOfflineCause, doConfigDotXml, doConfigSubmit, doDoDelete, doDumpExportTable, doProgressiveLog, doRssAll, doRssFailed, doRssLatest, doScript, doScriptText, doToggleOffline, getACL, getActions, getAllExecutors, getApi, getAssignedLabels, getBuilds, getCaption, getComputerPanelBoxs, getConnectTime, getDemandStartMilliseconds, getDescription, getDisplayExecutors, getDisplayName, getEnvironment, getEnvVars, getExecutors, getHeapDump, getHostName, getIcon, getIconAltText, getIdleStartMilliseconds, getLoadStatistics, getLog, getLogDir, getLogFile, getLogText, getMonitorData, getName, getNumExecutors, getOfflineCause, getOfflineCauseReason, getOneOffExecutors, getSearchUrl, getSystemProperties, getTerminatedBy, getThreadDump, getTiedJobs, getTimeline, getUrl, getWorkspaceList, interrupt, isAlive, isIdle, isManualLaunchAllowed, isOffline, isOnline, isPartiallyIdle, isTemporarilyOffline, launch, onRemoved, recordTermination, relocateOldLogs, removeExecutor, resolveForCLI, setTemporarilyOffline, setTemporarilyOffline, updateByXml, waitUntilOffline, waitUntilOnline
-
Methods inherited from class hudson.model.Actionable
addOrReplaceAction, doContextMenu, getAction, getAction, getActions, getAllActions, getDynamic, removeAction, removeActions, replaceAction, replaceActions
-
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
-
Methods inherited from interface hudson.model.DescriptorByNameOwner
getDescriptorByName
-
-
-
-
Constructor Detail
-
SlaveComputer
public SlaveComputer(Slave slave)
-
-
Method Detail
-
isAcceptingTasks
@OverrideMustInvoke public boolean isAcceptingTasks()
Description copied from class:Computer
Returnstrue
if the computer is accepting tasks. Needed to allow agents programmatic suspension of task scheduling that does not overlap with being offline.- Overrides:
isAcceptingTasks
in classComputer
- Returns:
true
if the computer is accepting tasks- See Also:
RetentionStrategy.isAcceptingTasks(Computer)
,Node.isAcceptingTasks()
-
getJnlpMac
public String getJnlpMac()
- Since:
- 1.498
-
setAcceptingTasks
public void setAcceptingTasks(boolean acceptingTasks)
Allows suspension of tasks being accepted by the agent computer. While this could be called by a ComputerLauncher or a RetentionStrategy, such usage can result in fights between multiple actors calling setting differential values. A better approach is to overrideRetentionStrategy.isAcceptingTasks(hudson.model.Computer)
if theRetentionStrategy
needs to control availability.- Parameters:
acceptingTasks
-true
if the agent can accept tasks.
-
isUnix
public Boolean isUnix()
Description copied from class:Computer
True if this computer is a Unix machine (as opposed to Windows machine).
-
getNode
@CheckForNull public Slave getNode()
Description copied from class:Computer
Returns theNode
that this computer represents.
-
getListener
@NonNull public TaskListener getListener()
Offers a way to write to the log file for this agent.- Since:
- 2.9
-
getIconClassName
public String getIconClassName()
Description copied from class:Computer
Returns the class name that will be used to lookup the icon. This class name will be added as a class tag to the html img tags where the icon should show up followed by a size specifier given byIcon.toNormalizedIconSizeClass(String)
The conversion of class tag to src tag is registered throughIconSet.addIcon(Icon)
It is both the recommended and default implementation to serve different icons based onComputer.isOffline()
- Overrides:
getIconClassName
in classComputer
- See Also:
Computer.getIcon()
-
isJnlpAgent
@Deprecated public boolean isJnlpAgent()
Deprecated.since 2008-05-20.Description copied from class:Computer
Returns true if this computer is supposed to be launched via inbound protocol.- Overrides:
isJnlpAgent
in classComputer
-
isLaunchSupported
public boolean isLaunchSupported()
Description copied from class:Computer
Returns true if this computer can be launched by Hudson proactively and automatically.For example, inbound agents return
false
from this, because the launch process needs to be initiated from the agent side.- Overrides:
isLaunchSupported
in classComputer
-
getLauncher
public ComputerLauncher getLauncher()
Return theComputerLauncher
for thisSlaveComputer
.- Since:
- 1.312
-
getDelegatedLauncher
public ComputerLauncher getDelegatedLauncher()
Return theComputerLauncher
for this SlaveComputer, strips off anyDelegatingComputerLauncher
s orComputerLauncherFilter
s.- Since:
- 2.83
-
_connect
protected Future<?> _connect(boolean forceReconnect)
Description copied from class:Computer
Allows implementing-classes to provide an implementation for the connect method.If already connected or if this computer doesn't support proactive launching, no-op. This method may return immediately while the launch operation happens asynchronously.
- Specified by:
_connect
in classComputer
- Parameters:
forceReconnect
- If true and a connect activity is already in progress, it will be cancelled and the new one will be started. If false, and a connect activity is already in progress, this method will do nothing and just return the pending connection operation.- Returns:
- A
Future
representing pending completion of the task. The 'completion' includes both a successful completion and a non-successful completion (such distinction typically doesn't make much sense because as soon asComputer
is connected it can be disconnected by some other threads.) - See Also:
Computer.disconnect()
-
taskAccepted
public void taskAccepted(Executor executor, Queue.Task task)
Description copied from interface:ExecutorListener
Called whenever a task is accepted by an executor.- Parameters:
executor
- The executor.task
- The task.
-
taskStarted
public void taskStarted(Executor executor, Queue.Task task)
Description copied from interface:ExecutorListener
Called whenever a task is started by an executor.- Parameters:
executor
- The executor.task
- The task.
-
taskCompleted
public void taskCompleted(Executor executor, Queue.Task task, long durationMS)
Description copied from interface:ExecutorListener
Called whenever a task is completed without any problems by an executor.- Parameters:
executor
- The executor.task
- The task.durationMS
- The number of milliseconds that the task took to complete.
-
taskCompletedWithProblems
public void taskCompletedWithProblems(Executor executor, Queue.Task task, long durationMS, Throwable problems)
Description copied from interface:ExecutorListener
Called whenever a task is completed with some problems by an executor.- Parameters:
executor
- The executor.task
- The task.durationMS
- The number of milliseconds that the task took to complete.problems
- The exception that was thrown.
-
isConnecting
public boolean isConnecting()
Description copied from class:Computer
Is aComputer.connect(boolean)
operation in progress?- Specified by:
isConnecting
in classComputer
-
openLogFile
public OutputStream openLogFile()
-
setChannel
public void setChannel(@NonNull InputStream in, @NonNull OutputStream out, @NonNull TaskListener taskListener, @CheckForNull hudson.remoting.Channel.Listener listener) throws IOException, InterruptedException
Creates aChannel
from the given stream and sets that to this agent. Same assetChannel(InputStream, OutputStream, OutputStream, Channel.Listener)
, but forTaskListener
.- Throws:
IOException
InterruptedException
-
setChannel
public void setChannel(@NonNull InputStream in, @NonNull OutputStream out, @CheckForNull OutputStream launchLog, @CheckForNull hudson.remoting.Channel.Listener listener) throws IOException, InterruptedException
Creates aChannel
from the given stream and sets that to this agent.- Parameters:
in
- Stream connected to the remote agent. It's the caller's responsibility to do buffering on this stream, if that's necessary.out
- Stream connected to the remote peer. It's the caller's responsibility to do buffering on this stream, if that's necessary.launchLog
- If non-null, receive the portion of data inis
before the data goes into the "binary mode". This is useful when the established communication channel might include some data that might be useful for debugging/trouble-shooting.listener
- Gets a notification when the channel closes, to perform clean up. Can be null. By the time this method is called, the cause of the termination is reported to the user, so the implementation of the listener doesn't need to do that again.- Throws:
IOException
InterruptedException
-
setChannel
@Restricted(org.kohsuke.accmod.restrictions.Beta.class) public void setChannel(@NonNull hudson.remoting.ChannelBuilder cb, @NonNull hudson.remoting.CommandTransport commandTransport, @CheckForNull hudson.remoting.Channel.Listener listener) throws IOException, InterruptedException
Creates aChannel
from the given Channel Builder and Command Transport. This method can be used to allowComputerLauncher
s to create channels not based on I/O streams.- Parameters:
cb
- Channel Builder. To print launch logs this channel builder should have a Header Stream defined (seeChannelBuilder.getHeaderStream()
) in this argument or by one ofChannelConfigurator
s.commandTransport
- Command Transportlistener
- Gets a notification when the channel closes, to perform clean up. Can benull
. By the time this method is called, the cause of the termination is reported to the user, so the implementation of the listener doesn't need to do that again.- Throws:
IOException
InterruptedException
- Since:
- 2.127
-
getClassLoadingCount
@CheckReturnValue public int getClassLoadingCount() throws IOException, InterruptedException
ShowsChannel.classLoadingCount
.- Returns:
- Requested value or
-1
if the agent is offline. - Throws:
IOException
InterruptedException
- Since:
- 1.495
-
getClassLoadingPrefetchCacheCount
@CheckReturnValue public int getClassLoadingPrefetchCacheCount() throws IOException, InterruptedException
ShowsChannel.classLoadingPrefetchCacheCount
.- Returns:
- Requested value or
-1
in case that capability is not supported or if the agent is offline. - Throws:
IOException
InterruptedException
- Since:
- 1.519
-
getResourceLoadingCount
@CheckReturnValue public int getResourceLoadingCount() throws IOException, InterruptedException
ShowsChannel.resourceLoadingCount
.- Returns:
- Requested value or
-1
if the agent is offline. - Throws:
IOException
InterruptedException
- Since:
- 1.495
-
getClassLoadingTime
@CheckReturnValue public long getClassLoadingTime() throws IOException, InterruptedException
ShowsChannel.classLoadingTime
.- Returns:
- Requested value or
-1
if the agent is offline. - Throws:
IOException
InterruptedException
- Since:
- 1.495
-
getResourceLoadingTime
@CheckReturnValue public long getResourceLoadingTime() throws IOException, InterruptedException
ShowsChannel.resourceLoadingTime
.- Returns:
- Requested value or
-1
if the agent is offline. - Throws:
IOException
InterruptedException
- Since:
- 1.495
-
getAbsoluteRemoteFs
@CheckForNull public String getAbsoluteRemoteFs()
Returns the remote FS root absolute path ornull
if the agent is off-line. The absolute path may change between connections if the connection method does not provide a consistent working directory and the node's remote FS is specified as a relative path.- Returns:
- the remote FS root absolute path or
null
if the agent is off-line. - Since:
- 1.606
-
getAbsoluteRemotePath
@Exported @Restricted(org.kohsuke.accmod.restrictions.DoNotUse.class) @CheckForNull public String getAbsoluteRemotePath()
Just for restFul api. Returns the remote FS root absolute path ornull
if the agent is off-line. The absolute path may change between connections if the connection method does not provide a consistent working directory and the node's remote FS is specified as a relative path.- Returns:
- the remote FS root absolute path or
null
if the agent is off-line or don't have connect permission. - Since:
- 2.125
- See Also:
getAbsoluteRemoteFs()
-
setChannel
public void setChannel(@NonNull hudson.remoting.Channel channel, @CheckForNull OutputStream launchLog, @CheckForNull hudson.remoting.Channel.Listener listener) throws IOException, InterruptedException
Sets up the connection through an existing channel.- Parameters:
channel
- the channel to use; warning: callers are expected to have calledChannelConfigurator
already.launchLog
- Launch log. If notnull
, will receive launch log messageslistener
- Channel event listener to be attached (if notnull
)- Throws:
IOException
InterruptedException
- Since:
- 1.444
-
getChannel
public hudson.remoting.Channel getChannel()
Description copied from class:Computer
Gets the channel that can be used to run a program on this computer.- Specified by:
getChannel
in classComputer
- Returns:
- never null when
Computer.isOffline()
==false.
-
getDefaultCharset
public Charset getDefaultCharset()
Description copied from class:Computer
Gets the default charset of this computer.- Specified by:
getDefaultCharset
in classComputer
- Returns:
- never null when
Computer.isOffline()
==false.
-
getLogRecords
public List<LogRecord> getLogRecords() throws IOException, InterruptedException
Description copied from class:Computer
Gets the logs recorded by this agent.- Specified by:
getLogRecords
in classComputer
- Throws:
IOException
InterruptedException
-
doSubmitDescription
@Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) public void doSubmitDescription(org.kohsuke.stapler.StaplerResponse rsp, @QueryParameter String description) throws IOException
Inline editing of description- Throws:
IOException
-
doDoDisconnect
public org.kohsuke.stapler.HttpResponse doDoDisconnect(@QueryParameter String offlineMessage)
-
disconnect
public Future<?> disconnect(OfflineCause cause)
Description copied from class:Computer
Disconnect this computer. If this is the built-in node, no-op. This method may return immediately while the launch operation happens asynchronously.- Overrides:
disconnect
in classComputer
- Parameters:
cause
- Object that identifies the reason the node was disconnected.- Returns:
Future
to track the asynchronous disconnect operation.- See Also:
Computer.connect(boolean)
-
doLaunchSlaveAgent
public void doLaunchSlaveAgent(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse rsp) throws IOException
Description copied from class:Computer
IfComputer.getChannel()
==null, attempts to relaunch the agent.- Specified by:
doLaunchSlaveAgent
in classComputer
- Throws:
IOException
-
tryReconnect
public void tryReconnect()
-
getJnlpJars
@Deprecated public Slave.JnlpJar getJnlpJars(String fileName)
Deprecated.since 2008-08-18. This URL binding is no longer used and moved up directly under toJenkins
, but it's left here for now just in case some old inbound agents request it.Serves jar files for inbound agents.
-
doSlaveAgentJnlp
@WebMethod(name="slave-agent.jnlp") public org.kohsuke.stapler.HttpResponse doSlaveAgentJnlp(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse res)
-
doJenkinsAgentJnlp
@WebMethod(name="jenkins-agent.jnlp") public org.kohsuke.stapler.HttpResponse doJenkinsAgentJnlp(org.kohsuke.stapler.StaplerRequest req, org.kohsuke.stapler.StaplerResponse res)
-
getTarget
@Restricted(org.kohsuke.accmod.restrictions.NoExternalUse.class) public Object getTarget()
-
kill
protected void kill()
Description copied from class:Computer
Called byJenkins.updateComputerList()
to notifyComputer
that it will be discarded.Note that at this point
Computer.getNode()
returns null.- Overrides:
kill
in classComputer
- See Also:
Computer.onRemoved()
-
getRetentionStrategy
public RetentionStrategy getRetentionStrategy()
Description copied from class:Computer
RetentionStrategy
associated with this computer.- Specified by:
getRetentionStrategy
in classComputer
- Returns:
- never null. This method return
RetentionStrategy<? super T>
whereT=this.getClass()
.
-
grabLauncher
protected ComputerLauncher grabLauncher(Node node)
Grabs aComputerLauncher
out ofNode
to keep it in thisComputer
. The returned launcher will be set tolauncher
and used to carry out the actual launch operation.Subtypes that needs to decorate
ComputerLauncher
can do so by overriding this method. This is useful forSlaveComputer
s for clouds for example, where one normally needs additional pre-launch step (such as waiting for the provisioned node to become available) before the user specified launch step (like SSH connection) kicks in.- See Also:
ComputerLauncherFilter
-
getSlaveVersion
@CheckReturnValue public String getSlaveVersion() throws IOException, InterruptedException
Get the agent version- Throws:
IOException
InterruptedException
-
getOSDescription
@CheckReturnValue public String getOSDescription() throws IOException, InterruptedException
Get the OS description.- Throws:
IOException
InterruptedException
-
getEnvVarsFull
@CheckReturnValue public Map<String,String> getEnvVarsFull() throws IOException, InterruptedException
Expose real full env vars map from agent for UI presentation- Throws:
IOException
InterruptedException
-
getChannelToMaster
@Deprecated public static hudson.remoting.VirtualChannel getChannelToMaster()
Deprecated.UseAgentComputerUtil.getChannelToController()
instead.Obtains aVirtualChannel
that allows some computation to be performed on the controller. This method can be called from any thread on the controller, or from agent (more precisely, it only works from the remoting request-handling thread in agents, which means if you've started separate thread on agents, that'll fail.)- Returns:
- null if the calling thread doesn't have any trace of where its controller is.
- Since:
- 1.362
-
getSystemInfoExtensions
@Restricted(org.kohsuke.accmod.restrictions.DoNotUse.class) @RestrictedSince("2.163") public static List<SlaveSystemInfo> getSystemInfoExtensions()
Helper method for Jelly.
-
-