Class Builder

source code

twisted.spread.jelly.Jellyable --+ | twisted.spread.flavors.Serializable --+ | twisted.spread.flavors.Referenceable --+ | twisted.application.service.Service --+ | | | twisted.application.service.MultiService --+ | Builder

I manage all Builds of a given type.

Each Builder is created by an entry in the config file (the c['builders'] list), with a number of parameters.

One of these parameters is the buildbot.process.factory.BuildFactory object that is associated with this Builder. The factory is responsible for creating new Build objects. Each Build object defines when and how the build is performed, so a new Factory or Builder should be defined to control this behavior.

The Builder holds on to a number of BuildRequest objects in a list named .buildable . Incoming BuildRequest objects will be added to this list, or (if possible) merged into an existing request. When a slave becomes available, I will use my BuildFactory to turn the request into a new Build object. The BuildRequest is forgotten, the Build goes into .building while it runs. Once the build finishes, I will discard it.

I maintain a list of available SlaveBuilders, one for each connected slave that the slavenames parameter says we can use. Some of these will be idle, some of them will be busy running builds for me. If there are multiple slaves, I can run multiple builds at once.

I also manage forced builds, progress expectation (ETA) management, and some status delivery chores.

Class Variables expectations = None

hash(x) Inherited from twisted.spread.flavors.Referenceable : __implemented__ , perspective Inherited from twisted.application.service.Service : name , parent , running

Instance Variables list of buildbot.process.buildrequest.BuildRequest buildable

BuildRequests that are ready to build, but which are waiting for a buildslave to be available. list of buildbot.process.build.Build building

Builds that are actively running list of buildbot.buildslave.BuildSlave objects slaves

the slaves currently available for building

Method Details

__init__ ( self , setup , builder_status )

(Constructor) source code Parameters: setup (dict) - builder setup data, as stored in BuildmasterConfig['builders']. Contains name, slavename(s), builddir, slavebuilddir, factory, locks.

(dict) - builder setup data, as stored in BuildmasterConfig['builders']. Contains name, slavename(s), builddir, slavebuilddir, factory, locks. builder_status (buildbot.status.builder.BuilderStatus) Overrides: twisted.application.service.MultiService.__init__

stopService ( self ) source code Overrides: twisted.application.service.Service.stopService

getOldestRequestTime ( *args , **kwargs ) source code Returns the submitted_at of the oldest unclaimed build request for this builder, or None if there are no build requests. Returns: datetime instance or None, via Deferred Decorators: @defer.deferredGenerator

consumeTheSoulOfYourPredecessor ( self , old ) source code Suck the brain out of an old Builder. This takes all the runtime state from an existing Builder and moves it into ourselves. This is used when a Builder is changed in the master.cfg file: the new Builder has a different factory, but we want all the builds that were queued for the old one to get processed by the new one. Any builds which are already running will keep running. The new Builder will get as many of the old SlaveBuilder objects as it wants.

attached ( self , slave , remote , commands ) source code This is invoked by the BuildSlave when the self.slavename bot registers their builder. Parameters: slave (buildbot.buildslave.BuildSlave) - the BuildSlave that represents the buildslave as a whole

(buildbot.buildslave.BuildSlave) - the BuildSlave that represents the buildslave as a whole remote ( twisted.spread.pb.RemoteReference ) - a reference to the buildbot.slave.bot.SlaveBuilder

( ) - a reference to the commands (dict: string -> string, or None) - provides the slave's version of each RemoteCommand Returns: twisted.internet.defer.Deferred a Deferred that fires (with 'self') when the slave-side builder is fully attached and ready to accept commands.

buildFinished ( self , build , sb , bids ) source code This is called when the Build has finished (either success or failure). Any exceptions during the build are reported with results=FAILURE, not with an errback.

setExpectations ( self , progress ) source code Mark the build as successful and update expectations for the next build. Only call this when the build did not fail in any way that would invalidate the time expectations generated by it. (if the compile failed and thus terminated early, we can't use the last build to predict how long the next one will take).