I am new to buildbot. We know that Schedulers would trigger all associated builds by default. I want to filter the builders at schedulers level.
What i am doing is, I am trying to override build() method of util.BuilderConfig
class with custom code by creating custom classes Builder_A
, Builder_B
which gets inherited from BuilderConfig
class:
Snippet:-
from buildbot.plugins import *
c = BuildmasterConfig = {}
c['workers'] = [worker.Worker("example-worker", "pass"), worker.Worker("example-worker1", "pass")]
class Builder_A(util.BuilderConfig):
name = "runtests"
workernames = ["example-worker"]
factory = util.BuildFactory()
factory.addStep(steps.ShellCommand(command=["echo", "all"]))
def build(self, request):
if request.source.changes:
for change in request.source.changes:
if not change.files or all(file.endswith('.c') or file.endswith('.h') for file in change.files):
return super().build(request)
return None
else:
return None
class Builder_B(util.BuilderConfig):
name = "runtests1"
workernames = ["example-worker1"]
factory = util.BuildFactory()
factory.addStep(steps.ShellCommand(command=["echo", "Source code"]))
def build(self, request):
if request.source.changes:
for change in request.source.changes:
if not change.files or all(file.endswith('.py') for file in change.files):
return super().build(request)
return None
else:
return None
c['protocols'] = {'pb': {'port': 9989}}
c['change_source'] = []
c['change_source'].append(changes.GitPoller(
'https://github.com/hello/Sample_Project.git',
workdir='gitpoller-workdir', branch='master',
pollInterval=30))
c['builders'] = [Builder_A(), Builder_B()]
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="all",
change_filter=util.ChangeFilter(branch='master'),
treeStableTimer=None,
builderNames=["runtests","runtests1"]))
c['schedulers'].append(schedulers.ForceScheduler(
name="force",
builderNames=["runtests"]))
c['services'] = []
c['title'] = "Hello World CI"
c['titleURL'] = "https://buildbot.github.io/hello-world/"
c['buildbotURL'] = "http://10.20.212.19:8010/"
c['www'] = dict(port=8010,
plugins=dict(waterfall_view={}, console_view={}, grid_view={}))
c['db'] = {
'db_url' : "sqlite:///state.sqlite",
}
Issue i am facing :-
Configuration Errors:
builder's name is required
builder '<unknown>' has no factory
builder '<unknown>': at least one workername is required
builder's name is required
builder '<unknown>' has no factory
builder '<unknown>': at least one workername is required
builder(s) <unknown> have no schedulers to drive them
Unknown builder 'runtests' in scheduler 'all'
Unknown builder 'runtests1' in scheduler 'all'
Unknown builder 'runtests' in scheduler 'force'
duplicate builder name '<unknown>'
duplicate builder builddir '_unknown_'
Am i missing something ? I don't find the related question posted by anyone in forums. Please help advice. Buildbot version:-
Buildbot version: 1.1.1-3ubuntu5
Twisted version: 17.9.0
Ubuntu :-
18.04