избежать одновременного запуска сборщиков в buildbot

Мне нужно получить данные с сервера, а это требует времени; обычно 30 мин и более.

У меня есть билдер, который получает данные с этого сервера; Я бы хотел, чтобы никакие другие билдеры на этом слейве не запускались, если я все еще запускаю этот билдер. После этого другой сборщик может работать одновременно, соблюдая мои настройки, связанные с максимальной параллельной сборкой.

Как мне этого добиться? Я смотрел на блокировки, но в руководстве нет четкого примера, показывающего, как настроить сборщика, чтобы заблокировать все остальные, пока не будет сделано.

Есть ли у кого-нибудь пример, который я могу использовать для настройки моей конфигурации, и куда идет каждая часть? Спасибо


person Community    schedule 26.05.2014    source источник


Ответы (1)


Пример блокировки:

import sys
from buildbot import locks
build_lock = locks.SlaveLock("slave_builds",
                             maxCount=sys.maxint)

c['builders'].append(BuilderConfig(name=exclusive_builder,
                                   slavenames=['my_slave'],
                                   factory=my_factory,
                                   locks=[build_lock.access('exclusive')]))
c['builders'].append(BuilderConfig(name=other_builder,
                                   slavenames=['my_slave'],
                                   factory=my_other_factory,
                                   locks=[build_lock.access('counting')]))

Сборка с этой блокировкой будет иметь эксклюзивный доступ к подчиненному устройству. Более сложные примеры не плохо объяснены в разделе документации о блокировках

person hithwen    schedule 26.05.2014
comment
Спасибо, Hitwen, наконец-то наглядный пример того, как это выглядит, когда вы хотите поставить блокировку на билдер, а не на базу данных. Хотя кажется, что блокировка не соблюдается; Я добавил строку замков в свой билдер, который должен иметь эксклюзивный доступ до завершения, и перезапустил (без ошибок), но если этот билдер с блокировкой запущен, я все равно вижу другие билдеры, работающие в то же время. Стоит ли искать что-то конкретно по логам? - person ; 27.05.2014
comment
попробуйте установить maxCount=sys.maxint в определении блокировки и добавить locks=[build_lock.access('counting')] к остальным сборщикам, работающим на том же подчиненном устройстве. Если это не сработает, вам, вероятно, придется спросить в списке рассылки. - person hithwen; 27.05.2014
comment
Итак, кажется, что если я поставлю блокировку только на билдер, который я хочу запустить в одиночку, это не сработает. Если я также добавлю подсчет для всех других строителей и установлю его на 1, это сработает. Не уверен, что это ожидаемое поведение, но теперь оно соблюдает блокировки (что не для меня; я ожидаю, что мне нужно указать, какой билдер имеет блокировку, в то время как другие могут работать одновременно). Большое спасибо! - person ; 29.05.2014
comment
Кажется, что строители, которые не используют замок, просто игнорируют его. - person hithwen; 29.05.2014
comment
да, для меня это имеет очень мало смысла, почему он не уважает замки. Логика подсказывает, что вам просто нужно указать, какой сборщик или шаг имеет блокировку, в то время как другие будут подчиняться параметру max concurrent build в файле конфигурации. - person ; 02.06.2014