Buildbot如何处理多个建筑商

问题描述

我已经按照本教程在FreeBSD 12.1上设置了我的buildbot服务器:

https://www.digitalocean.com/community/tutorials/how-to-build-and-deploy-packages-for-your-freebsd-servers-using-buildbot-and-poudriere

在我更改了本教程处理工作者数组的方式之后,服务器正在使用poudriere进行构建。

我在/var/buildbot-master/master.cfg文件中针对我的情况修改了教程说明:

. . .
####### SCHEDULERS

c['schedulers'] = []

# Forceful scheduler allowed for all builders
c['schedulers'].append(schedulers.ForceScheduler(
    name='force',builderNames=[builder.name for builder in c['builders']]))

# Watch ports tree for changes on given branch
c['schedulers'].append(schedulers.SingleBranchScheduler(
    name='sched-bulk-121amd64-2020Q2',change_filter=util.ChangeFilter(project='freebsd-ports',branch='branches/2020Q2'),builderNames=['bulk-121amd64-2020Q2']))
. . .

此行在启动时给出错误

builderNames=[builder.name for builder in c['builders']]))

我不了解pyhton,但在我看来,将所有建筑商名称放在数组中是 ...

错误消息是:

2020-09-16 15:33:18-0300 [-] twistd 20.3.0 (/usr/local/bin/python3.7 3.7.9) starting up.
2020-09-16 15:33:18-0300 [-] reactor class: twisted.internet.pollreactor.PollReactor.
2020-09-16 15:33:18-0300 [-] Starting BuildMaster -- buildbot.version: 2.7.0
2020-09-16 15:33:18-0300 [-] Loading configuration from '/var/buildbot-master/master.cfg'
2020-09-16 15:33:18-0300 [-] error while parsing config file:
        Traceback (most recent call last):
          File "/usr/local/lib/python3.7/site-packages/twisted/python/threadpool.py",line 266,in <lambda>
            inContext.theWork = lambda: context.call(ctx,func,*args,**kw)
          File "/usr/local/lib/python3.7/site-packages/twisted/python/context.py",line 122,in callWithContext
            return self.currentContext().callWithContext(ctx,line 85,in callWithContext
            return func(*args,**kw)
          File "/usr/local/lib/python3.7/site-packages/buildbot/config.py",line 170,in loadConfig
            self.basedir,self.configFileName)
        --- <exception caught here> ---
          File "/usr/local/lib/python3.7/site-packages/buildbot/config.py",line 128,in loadConfigDict
            execfile(filename,localDict)
          File "/usr/local/lib/python3.7/site-packages/twisted/python/compat.py",line 247,in execfile
            exec(code,globals,locals)
          File "/var/buildbot-master/master.cfg",line 103,in <module>
            builderNames=[builder.name for builder in c['builders']]))
        builtins.KeyError: 'builders'

2020-09-16 15:33:18-0300 [-] Configuration Errors:
2020-09-16 15:33:18-0300 [-]   error while parsing config file: 'builders' (traceback in logfile)
2020-09-16 15:33:18-0300 [-] Halting master.
2020-09-16 15:33:18-0300 [-] BuildMaster startup failed
2020-09-16 15:33:18-0300 [-] BuildMaster is stopped
2020-09-16 15:33:18-0300 [-] Main loop terminated.
2020-09-16 15:33:18-0300 [-] Server Shut Down.

以下部分指向在哪里进行更改

          File "/var/buildbot-master/master.cfg",in <module>
            builderNames=[builder.name for builder in c['builders']]))
        builtins.KeyError: 'builders'

2020-09-16 15:33:18-0300 [-] Configuration Errors:
2020-09-16 15:33:18-0300 [-]   error while parsing config file: 'builders' (traceback in logfile)
2020-09-16 15:33:18-0300 [-] Halting master.

因此,代替检查数组,我对参数进行了硬编码:

builderNames=[builder.name for builder in c['builders']]))

收件人:

builderNames=['bulk-121amd64-2020Q2']))

然后,构建机器人将启动,并且可以运行poudriere。

我的问题是

正确的语法应该使用什么来检查 数组c ['builders'] ,使其动态而不是硬编码?

尝试了许多来自python教程的示例,但均未成功。

解决方法

在默认的 master.cfg.sample 中,结构 c['builders']c['schedulers'] 之后创建,这就是它在您的代码中未定义的原因。

尝试在 SCHEDULERS 块之前放置(移动)BUILDERS 块。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...