Buildbot:触发虚拟建造者问题

Buildbot: trigger virtual builders problem

我希望动态触发构建器(取决于传入项目的支持平台列表)。 有 virtual builders 个用于此目的。 它确实有效,但存在一个关键问题: 当我触发的虚拟构建数量超过空闲工作人员数量时,其他构建将被跳过。

在下面的图片中,一名活跃的工作人员触发了 4 个构建

成功后,我们只能看到两个已执行的构建。其他都丢了(根本没有执行)

同样,对于 1 个空闲(活动的,未暂停的)工作人员,仅执行了 2 个(共 4 个)触发的构建。对于 N 个免费工作人员,它将执行 N+1 个构建。复制 100%.

代码很清楚

class MultiplePlatformsBuilder(Trigger):
    def __init__(self, *args, **kwargs):
        ...

    def getSchedulersAndProperties(self):
        sch = self.schedulerNames[0]
        triggered_schedulers = []
        counter = 0
        # trigger scheduler for each requested platform
        platforms_list = self.set_properties.get('buildable_platforms_list')
        for pl in platforms_list:
            counter += 1
            props = dict()
            props["virtual_builder_name"] = "virtual-" + pl
            props["virtual_builder_description"] = "This is dynamic build " + str(counter)
            triggered_schedulers.append([sch, props])

        return triggered_schedulers

# trigger configuration    
c['schedulers'].append(schedulers.Triggerable(name='dynamic_scheduler', builderNames=['factory1']))
factory.addStep(MultiplePlatformsBuilder(
    schedulerNames=['dynamic_scheduler'],
    set_properties={
        'buildable_platforms_list': ["platform1", "platform2", "platform3", "platform4"]
        # platforms_list_var: Property(platforms_list_var),
    },
))

这个问题花了我好几天时间。事实证明这不是错误,而是名为 Collapsing Build Requests

的功能

如果没有空闲工作人员,所有具有相同代码库的构建请求都会崩溃。

我只需要禁用此功能即可:

c['collapseRequests'] = False

我确定这应该在虚拟构建器的上下文中提及,因为它们都有相同的代码库但不应折叠 - 这没有意义