1

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
vam
  • 11
  • 3

0 Answers0