From 933d275fc5759d8872cdf32832782fd84dc7d210 Mon Sep 17 00:00:00 2001 From: Will Holland Date: Fri, 18 Sep 2015 08:38:02 +0100 Subject: Add Column abstraction to buildbot This will make it easier to tweak CIAT --- source/bottlerock.py | 2 +- source/master.cfg | 97 ++++++--------------------------------------------- source/orch_config.py | 62 ++++++++++++++++++++++++++++++-- 3 files changed, 72 insertions(+), 89 deletions(-) diff --git a/source/bottlerock.py b/source/bottlerock.py index 3a34e4b..28d584d 100644 --- a/source/bottlerock.py +++ b/source/bottlerock.py @@ -5,7 +5,7 @@ from bottle import post, request, run, HTTPResponse import imp -orch_config = imp.load_source('module.name', '../source/orch_config.py') +orch_config = imp.load_source('orch_config', '../source/orch_config.py') LOGFILE = '../orch.log' DEFINITIONS = 'ssh://git@cu010-trove.codethink.com/baserock/baserock/definitions' diff --git a/source/master.cfg b/source/master.cfg index 162df0f..8f2cf99 100644 --- a/source/master.cfg +++ b/source/master.cfg @@ -39,7 +39,7 @@ c['change_source'].append(PBChangeSource( from buildbot.changes.filter import ChangeFilter import imp -orch_config = imp.load_source('module.name', '../../source/orch_config.py') +orch_config = imp.load_source('orch_config', '../../source/orch_config.py') categories = {} for _c in orch_config.categories: @@ -54,26 +54,12 @@ from buildbot.schedulers.basic import SingleBranchScheduler from buildbot.schedulers.forcesched import ForceScheduler from buildbot.changes import filter c['schedulers'] = [] -c['schedulers'].append(SingleBranchScheduler( - name = "trigger_firehose_sched", - change_filter = categories['repo_update'], +for column in orch_config.columns: + c['schedulers'].append(SingleBranchScheduler( + name = "%s_sched" % column.category, + change_filter = categories[column.category], treeStableTimer = None, - builderNames = ["1. Integration"])) -c['schedulers'].append(SingleBranchScheduler( - name = "trigger_builders_sched", - change_filter = categories['definitions_update'], - treeStableTimer = None, - builderNames = ["2. Build"])) -c['schedulers'].append(SingleBranchScheduler( - name = "trigger_deploy_sched", - change_filter = categories['build_complete'], - treeStableTimer = None, - builderNames = ["3. Deploy"])) -c['schedulers'].append(SingleBranchScheduler( - name = "trigger_testing_sched", - change_filter = categories['deploy_complete'], - treeStableTimer = None, - builderNames = ["4. Test"])) + builderNames = [column.name])) ####### BUILDERS @@ -81,75 +67,14 @@ c['schedulers'].append(SingleBranchScheduler( # what steps, and which slaves can execute them. Note that any particular build will # only take place on one slave. -from buildbot.process.factory import BuildFactory -from buildbot.steps.shell import ShellCommand -from buildbot.plugins import steps, util - -firehose_factory = BuildFactory() -firehose_factory.addStep(steps.Git( - repourl=orch_config.buildslave_scripts, - mode='incremental')) -repo_name = util.Property('repo_name',default="no repo name given") -firehose_cmd = ["sh","triggers/firehose_trigger.sh",repo_name] -firehose_factory.addStep(ShellCommand(command=firehose_cmd)) - -builders_factory = BuildFactory() -builders_factory.addStep(steps.Git( - repourl=orch_config.buildslave_scripts, - mode='incremental')) -builders_factory.addStep(ShellCommand(command=["sh","get_definitions.sh"])) -force = util.Property('force',default="") -builders_cmd = ["sh","triggers/builders_trigger.sh",force] -builders_factory.addStep(ShellCommand(command=builders_cmd, - timeout=orch_config.build_timeout)) - -deploy_factory = BuildFactory() -deploy_factory.addStep(steps.Git( - repourl=orch_config.buildslave_scripts, - mode='incremental')) -deploy_factory.addStep(ShellCommand(command=["sh","get_definitions.sh"])) -system = util.Property('system',default="no system given") -buildslave_scripts_sha = util.Property('buildslave_scripts_sha',default="no buildslave-scripts sha given") -definitions_sha = util.Property('definitions_sha',default="no definitions sha given") -testing_sha = util.Property('testing_sha',default="no testing sha given") -buildnumber = util.Property('buildnumber',default=0) -deploy_cmd = ["sh","triggers/deploy_trigger.sh", - system, - buildnumber, - buildslave_scripts_sha, - definitions_sha, - testing_sha] -deploy_factory.addStep(ShellCommand(command=deploy_cmd, - timeout=orch_config.deploy_timeout)) - -testing_factory = BuildFactory() -testing_factory.addStep(steps.Git( - repourl=orch_config.buildslave_scripts, - mode='incremental')) -artefact = util.Property('artefact',default=0) -testing_sha = util.Property('testing_sha',default="no_testing_sha_given") -testing_cmd = ["sh","triggers/testing_trigger.sh",artefact,testing_sha] -testing_factory.addStep(ShellCommand(command=testing_cmd)) - from buildbot.config import BuilderConfig c['builders'] = [] -c['builders'].append( - BuilderConfig(name="1. Integration", - slavenames=["example-slave"], - factory=firehose_factory)) -c['builders'].append( - BuilderConfig(name="2. Build", - slavenames=["example-slave"], - factory=builders_factory)) -c['builders'].append( - BuilderConfig(name="3. Deploy", - slavenames=["example-slave"], - factory=deploy_factory)) -c['builders'].append( - BuilderConfig(name="4. Test", - slavenames=["example-slave"], - factory=testing_factory)) +for column in orch_config.columns: + c['builders'].append( + BuilderConfig(name=column.name, + slavenames=["example-slave"], + factory=column.factory)) ####### STATUS TARGETS diff --git a/source/orch_config.py b/source/orch_config.py index 4ecf94d..846d37e 100644 --- a/source/orch_config.py +++ b/source/orch_config.py @@ -4,8 +4,66 @@ categories = [ 'build_complete', 'deploy_complete'] +buildslave_scripts = 'git://cu010-trove.codethink.com/cu010-trove/br6/buildslave-scripts.git' + +class Column: + def __init__(self, + name, + category, + trigger, + properties, + get_definitions=False): + self.name = name + self.category = category + self.trigger = trigger + self.properties = properties + self.get_definitions=get_definitions + + from buildbot.process.factory import BuildFactory + from buildbot.steps.shell import ShellCommand + from buildbot.plugins import steps, util + + self.util_properties = [] + for property in self.properties.items(): + self.util_properties.append( + util.Property(property[0],default=property[1])) + + self.factory = BuildFactory() + self.factory.addStep(steps.Git( + repourl=buildslave_scripts, + mode='incremental')) + self.cmd = ['sh',self.trigger]+self.util_properties + if self.get_definitions: + get_defns_cmd = ['sh','get_definitions.sh'] + self.factory.addStep(ShellCommand(command=get_defns_cmd)) + self.factory.addStep(ShellCommand(command=self.cmd)) + +columns = [ + Column( name = "1. Integration", + category = "repo_update", + trigger = 'firehose_trigger.sh', + properties = {'repo_name':'no repo name given'}), + Column( name = "2. Build", + category = "definitions_update", + trigger = 'builders_trigger.sh', + properties = {"force":""}), + Column( name = "3. Deploy", + category = "build_complete", + trigger = 'deploy_trigger.sh', + properties = { + 'system':'no system give', + 'buildnumber':0, + 'buildslave_scripts_sha':'no buildslave-scripts SHA given', + 'definitions_sha':'no definitions SHA given', + 'testing_sha':'no testing SHA given'}), + Column( name = "4. Test", + category = "deploy_complete", + trigger = 'testing_trigger.sh', + properties = { + 'artefact':'no artefact given', + 'testing_sha':'no testing SHA given'})] + build_timeout = 1800 deploy_timeout = 1800 -buildslave_scripts = 'git://cu010-trove.codethink.com/cu010-trove/br6/buildslave-scripts.git' web_user = "codething" -web_password = "password" +web_user_password = "password" -- cgit v1.2.1