You can use build properties in ShellCommands by using the
WithProperties wrapper when setting the arguments of
the ShellCommand. This interpolates the named build properties
into the generated shell command. Most step parameters accept
WithProperties. Please file bugs for any parameters which
from buildbot.steps.shell import ShellCommand from buildbot.process.properties import WithProperties f.addStep(ShellCommand( command=["tar", "czf", WithProperties("build-%s.tar.gz", "revision"), "source"]))
If this BuildStep were used in a tree obtained from Subversion, it would create a tarball with a name like build-1234.tar.gz.
WithProperties function does
interpolation, using strings obtained by calling
build.getProperty(propname). Note that for every
%d, etc), you must have exactly one additional argument to
indicate which build property you want to insert.
You can also use python dictionary-style string interpolation by using
%(propname)s syntax. In this form, the property name goes
in the parentheses, and WithProperties takes no additional
f.addStep(ShellCommand( command=["tar", "czf", WithProperties("build-%(revision)s.tar.gz"), "source"]))
Don't forget the extra “s” after the closing parenthesis! This is the cause of many confusing errors.
The dictionary-style interpolation supports a number of more advanced syntaxes, too.
propnameexists, substitute its value; otherwise, substitute
replacementmay be empty (
replacement; otherwise, substitute an empty string.
Although these are similar to shell substitutions, no other
substitutions are currently supported, and
replacement in the
above cannot contain more substitutions.
Note: like python, you can either do positional-argument interpolation
or keyword-argument interpolation, not both. Thus you cannot use
a string like
The following build properties are set when the build is started, and are available to all steps.
None(which interpolates into
WithPropertiesas an empty string) if the build is on the default branch, which is generally the trunk. Otherwise it will be a string like “branches/beta1.4”. The exact syntax depends upon the VC system being used.
If the “force build” button was pressed, the revision will be
which means to use the most recent revision available. This is a “trunk
build”. This will be interpolated as an empty string.
revision, except for trunk builds, where
got_revisionindicates what revision was current when the checkout was performed. This can be used to rebuild the same source code later.
Note that for some VC systems (Darcs in particular), the revision is a
large string containing newlines, and is not suitable for interpolation
into a filename.