Как заставить Buildbot отвечать на коммиты слияния? - PullRequest
0 голосов
/ 26 сентября 2018

Если я фиксирую ветку напрямую, 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),
]

Я считаю, что это должно делать то, что я хочу, но это не работает.Все мои работники вносят изменения, но только тогда, когда изменение напрямую им поручено.Объединенные изменения не вызывают сборку.Что я делаю не так?

...