저는 빌더를 동적으로 빌더에 추가 할 수 있어야하는 프로젝트에서 작업하고 있습니다. 빌드 프로세스는 모두 같을 것입니다 (마이크로 서비스라고 생각합니다). 그러나 그들은 다른 소스 코드 저장소에서 작업하고 소스 코드 저장소의 이름에 따라 주로 출력을 생성합니다. 내가 적절한 활성화 URL에 게시하여 임의의 변화를 만들 수 있습니다있는 contrib에서 스크립트를 발견 http://docs.buildbot.net/latest/manual/cfg-buildfactories.html#dynamic-build-factoriesBuildbot : 새 빌더 또는 BuilderConfig 또는 프로젝트를 동적으로 작성합니다.
:
그것은 알라 트래비스 (https://github.com/buildbot/buildbot_travis)를하거나 동적 빌드 공장 동적 빌드 단계를 얻기 위해 매우 쉽습니다 : https://github.com/buildbot/buildbot-contrib/blob/master/master/contrib/post_build_request.py
이은 webhook에 대한 게시물은 어느 :이 https://github.com/buildbot/buildbot/blob/master/master/buildbot/www/hooks/base.py
는 master.cfg에서과 같이 사용할 수
c['www'] = dict(port=8010,
plugins=dict(waterfall_view={}, console_view={}),
change_hook_dialects={
'base': True,
})
위대한, 나는 그것을 멀리 얻었다. 그리고 내가 그렇게했을 때, twistd.log를보고 다음을보십시오.
2017-05-22 20:43:29-0500 [_GenericHTTPChannelProtocol,17,127.0.0.1] Attempting to load module buildbot.www.hooks.base
2017-05-22 20:43:29-0500 [_GenericHTTPChannelProtocol,17,127.0.0.1] Got the following changes [{'category': 'release', 'codebase': None, 'repository': 'mikes_microservice', 'author': 'sandford', 'when': None, 'comments': u'post_build_request submission', 'project': 'mike_basic_stats', 'branch': None, 'revlink': None, 'properties': {}, 'files': [], 'revision': None}]
2017-05-22 20:43:29-0500 [_GenericHTTPChannelProtocol,17,127.0.0.1] Payload: {'category': ['release'], 'project': ['mikes_microservice'], 'repository': ['mikes_microservice'], 'comments': ['post_build_request submission'], 'author': ['sandford']}
2017-05-22 20:43:29-0500 [_GenericHTTPChannelProtocol,17,127.0.0.1] WARNING: change source is using deprecated self.master.addChange method; this method will disappear in Buildbot-1.0.0
2017-05-22 20:43:29-0500 [-] added change with revision None to database
2017-05-22 20:43:29-0500 [-] injected change Change(revision=None, who=u'sandford', branch=None, comments=u'post_build_request submission', when=1495503809, category=u'release', project=u'mikes_microservice', repository=u'mikes_microservice', codebase=u'')
모두가 함께합니다! 아아, 실제 빌드를 시작한 것은 없습니다. 내 의혹은 내가 빌더를 빌더에 넣지 않았기 때문이라고 생각한다. 설정 :
c['builders'] = []
c['builders'].append(
util.BuilderConfig(name="example",
workernames=["example-worker"],
factory=factory))
그래서 그 트릭입니다. 나는이 목록을 시작할 때 동적으로 만들 수 있다고 생각하지만 항상 새로운 마이크로 서비스를 만들고 있으며 끊임없이 재시작해야한다는 걱정이 듭니다.
그냥 내가이 BuilderConfig (그리고 스케줄러 항목)를 첨가하고 다시 시도 얻을 수 얼마나 멀리 볼 수 있습니다 :c['builders'].append(
util.BuilderConfig(name="mikes_microservice",
workernames=["example-worker"],
factory=factory))
그리고 스케줄러 : 다음
c['schedulers'] = []
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="all",
change_filter=util.ChangeFilter(branch='master'),
treeStableTimer=None,
builderNames=["example",]))
c['schedulers'].append(schedulers.ForceScheduler(
name="force",
builderNames=["example", "mikes_microservice", ]))
내가 스크립트를 실행 시도 다시 :
python post_build_request.py -P mikes_microservice -r mikes_microservice --branch master
내가 "mikes_microservi"가 아닌 "example"프로젝트에서 빌드를 얻었을 때 "mikes_microservice"프로젝트/빌더가 트리거 될 것으로 예상했기 때문에 스케줄러 나 변경 필터가 완료되는 방식을 이해하지 못할 수도 있습니다.
그런 다음 "mikes_microservice"를 SingleBranchScheduler builderNames에 추가하고 "mikes_microservice"빌드를 트리거 할 수 있었으며 "example"빌드도 생성 할 수있었습니다.
같은 스케줄러에 여러 빌더가있는 것이 문제를 일으키고 있다는 것을 알아 냈으므로 동일한 효과를 내기 위해 별도의 스케줄러로 분할했습니다. 적어도 webhooks를 통해 - - 분명히
c['schedulers'].append(schedulers.SingleBranchScheduler(
name="mikes_microservice",
change_filter=util.ChangeFilter(branch='master'),
treeStableTimer=None,
builderNames=["mikes_microservice"]))
나는 다르게 구축하기 위해 다른 프로젝트 나 저장소를 활용하는 방법에 대해 뭔가를 놓친 그리고 난 그 문제를 해결하면 나는 새로운 [무엇이든 모든 주입에 관심이 있어요 런타임에 buildbot에 새로운 프로젝트 나 리포지토리를 선택하고 다시 시작하지 않고 빌드하도록하기 위해 런타임에 buildbot에이 작업을 수행합니다.