Trees | Indices | Help |
|
---|
|
I represent a single step of the build process. This step may involve zero or more commands to be run in the build slave, as well as arbitrary processing on the master side. Regardless of how many slave commands are run, the BuildStep will result in a single status value.
The step is started by calling startStep(), which returns a Deferred
that fires when the step finishes. See startStep
for a
description of the results provided by that Deferred.
__init__ and start are good methods to override. Don't forget to upcall BuildStep.__init__ or bad things will happen.
To launch a RemoteCommand, pass it to .runCommand and wait on the Deferred it returns.
Each BuildStep generates status as it runs. This status data is fed to
the buildbot.status.builder.BuildStepStatus listener that
sits in self.step_status
. It can also feed progress data
(like how much text is output by a shell command) to the buildbot.status.progress.StepProgress object that lives
in self.progress
, by calling self.setProgress(metric,
value)
as it runs.
Instance Methods | |||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
Class Variables | |
haltOnFailure = False
|
|
flunkOnWarnings = False
|
|
flunkOnFailure = False
|
|
warnOnWarnings = False
|
|
warnOnFailure = False
|
|
alwaysRun = False
|
|
parms =
|
|
name =
|
|
locks =
|
|
progressMetrics =
|
|
useProgress = True
|
|
doStepIf = True
|
Instance Variables | |
buildbot.process.base.Build |
build = None the parent Build which is executing this step |
buildbot.status.builder.BuildStepStatus |
step_status = None collects output status |
buildbot.status.progress.StepProgress |
progress = None tracks ETA for the step |
Method Details |
Begin the step. This returns a Deferred that will fire when the step finishes. This deferred fires with a tuple of (result, [extra text]), although
older steps used to return just the 'result' value, so the receiving base.Build
needs to be prepared to handle that too. The deferred will errback if the step encounters an exception, including an exception on the slave side (or if the slave goes away altogether). Failures in shell commands (rc!=0) will not cause an errback, in general the BuildStep will evaluate the results and decide whether to treat it as a WARNING or FAILURE.
|
Begin the step. Override this method and add code to do local processing, fire off remote commands, etc. To spawn a command in the buildslave, create a RemoteCommand instance and run it with self.runCommand: c = RemoteCommandFoo(args) d = self.runCommand(c) d.addCallback(self.fooDone).addErrback(self.failed) As the step runs, it should send status information to the BuildStepStatus: self.step_status.setText(['compile', 'failed']) self.step_status.setText2(['4', 'warnings']) To have some code parse stdio (or other log stream) in realtime, add a LogObserver subclass. This observer can use self.step.setProgress() to provide better progress notification to the step.: self.addLogObserver('stdio', MyLogObserver()) To add a LogFile, use self.addLog. Make sure it gets closed when it finishes. When giving a Logfile to a RemoteShellCommand, just ask it to close the log when the command completes: log = self.addLog('output') cmd = RemoteShellCommand(args) cmd.useLog(log, closeWhenFinished=True) You can also create complete Logfiles with generated text in a single step: self.addCompleteLog('warnings', text) When the step is done, it should call self.finished(result). 'result' will be provided to the buildbot.process.base.Build, and should be one of the constants defined above: SUCCESS, WARNINGS, FAILURE, or SKIPPED. If the step encounters an exception, it should call self.failed(why). 'why' should be a Failure object. This automatically fails the whole build with an exception. It is a good idea to add self.failed as an errback to any Deferreds you might obtain. If the step decides it does not need to be run, start() can return the constant SKIPPED. This fires the callback immediately: it is not necessary to call .finished yourself. This can also indicate to the status-reporting mechanism that this step should not be displayed. A step can be configured to only run under certain conditions. To do this, set the step's doStepIf to a boolean value, or to a function that returns a boolean value. If the value or function result is False, then the step will return SKIPPED without doing anything, otherwise the step will be executed normally. If you set doStepIf to a function, that function should accept one parameter, which will be the Step object itself. |
Halt the command, either because the user has decided to cancel the build ('reason' is a string), or because the slave has disconnected ('reason' is a ConnectionLost Failure). Any further local processing should be skipped, and the Step completed with an error status. The results text should say something useful like ['step', 'interrupted'] or ['remote', 'lost'] |
Return the version number of the given slave command. For the commands defined in buildbot.slave.commands, this is the value of 'cvs_ver' at the top of that file. Non-existent commands will return a value of None. Buildslaves running buildbot-0.5.0 or earlier did not respond to the version query: commands on those slaves will return a value of OLDVERSION, so you can distinguish between old buildslaves and missing commands. If you know that <=0.5.0 buildslaves have the command you want (CVS and SVN existed back then, but none of the other VC systems), then it makes sense to call this with oldversion='old'. If the command you want is newer than that, just leave oldversion= unspecified, and the command will return None for a buildslave that does not implement the command. |
Add a BuildStep URL to this step. An HREF to this URL will be added to any HTML representations of this step. This allows a step to provide links to external web pages, perhaps to provide detailed HTML code coverage results or other forms of build status. |
Class Variable Details |
parms
|
Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Fri Oct 29 10:00:42 2010 | http://epydoc.sourceforge.net |