Если я фиксирую ветку напрямую, Buildbot забирает ее и запускает мою сборку, но если я объединяю запрос на извлечение с веткой, Buildbot игнорирует его, и в его журнале ничего не отображается.Как заставить Buildbot создавать код, полученный в результате слияния?
Когда кто-то вносит изменения в мою «промежуточную» ветку, я хочу, чтобы Buildbot запускал специальную сборку, которая запускает юнит-тесты, а затем, если тесты пройдут успешно, развертывает код на промежуточном сервере.Для фиксации во всех других ветвях у меня есть отдельные работники, выполняющие отдельную сборку, которая выполняет тесты, но не развертывает.
Это соответствующие части моего Buildbot cfg:
c['change_source'] = [
changes.GitPoller(
'git@bitbucket.org:myaccount/myproject.git',
workdir='gitpoller-workdir',
#TODO:fix, this is cached at initial load and not updated, use a cache-breaking proxy to resolve
#branches=['master', 'staging'] + get_pull_request_branch_names(open=True),
#branches=True,
project='myproject',
pollinterval=60, # interval in seconds between polls
buildPushesWithNoCommits=True, # build merge commits
),
]
def fileIsImportant(change):
"""
Return true if meaningful code has changed. Returns false otherwise.
"""
print('Running fileIsImportant:', change)
important_extensions = set(['.py', '.js', '.css', '.html'])
print('%i files changed.' % len(change.files))
for f in change.files:
print('Checking file:', f)
ext = os.path.splitext(f)[-1].lower()
if ext in important_extensions:
print('Important extension found.')
return True
print('No important extensions found.')
return False
c['schedulers'] = [
schedulers.SingleBranchScheduler(
name="master",
change_filter=util.ChangeFilter(branch='master'),
treeStableTimer=30,
fileIsImportant=fileIsImportant,
builderNames=["myproject_runtests"],
),
schedulers.SingleBranchScheduler(
name="staging",
change_filter=util.ChangeFilter(branch='staging'),
treeStableTimer=30,
fileIsImportant=fileIsImportant,
builderNames=["myproject_runtests_staging"],
),
schedulers.AnyBranchScheduler(
name="open",
change_filter=util.ChangeFilter(branch_fn=lambda b: b not in ['master', 'staging']), # Exclude master and staging
treeStableTimer=30,
fileIsImportant=fileIsImportant,
builderNames=["myproject_runtests"],
),
schedulers.ForceScheduler(
name="force",
buttonName="Use the Force",
builderNames=["myproject_runtests"],
)
]
c['builders'] = [
# The first worker will build all branches, including staging, which it will also deploy.
util.BuilderConfig(
name="myproject_runtests_staging",
workernames=[
"worker1",
],
collapseRequests=True,
factory=factory),
# All workers but the first will run builds for everything except staging.
util.BuilderConfig(
name="myproject_runtests",
workernames=[
"worker2",
"worker3",
],
collapseRequests=True,
factory=factory),
]
Я считаю, что это должно делать то, что я хочу, но это не работает.Все мои работники вносят изменения, но только тогда, когда изменение напрямую им поручено.Объединенные изменения не вызывают сборку.Что я делаю не так?