c['workers'].append(worker.LocalWorker("generic-worker"))
c['workers'].append(worker.LocalWorker("deploy-worker"))
+ db_lock = util.MasterLock("deploy_after_build")
+
c['schedulers'].append(hook_scheduler("Caldance", timer=1))
c['schedulers'].append(force_scheduler("force_caldance", ["Caldance_build"]))
c['schedulers'].append(deploy_scheduler("deploy_caldance", ["Caldance_deploy"]))
c['schedulers'].append(deploy_hook_scheduler("Caldance", timer=1))
- c['builders'].append(factory("caldance"))
+ c['builders'].append(factory("caldance", locks=[db_lock.access('exclusive')]))
- c['builders'].append(deploy_factory("caldance"))
+ c['builders'].append(deploy_factory("caldance", locks=[db_lock.access('exclusive')]))
c['services'].append(SlackStatusPush(
name="slack_status_caldance",
recipients=E.XMPP_RECIPIENTS,
password=open(E.SECRETS_FILE + "/notify_xmpp_password", "r").read().rstrip()))
-def factory(project, ignore_fails=False):
+def factory(project, locks=[], ignore_fails=False):
release_file = "{1}/{0}_%(kw:clean_branch)s.tar.gz"
package = util.Interpolate("{0}_%(kw:clean_branch)s.tar.gz".format(project), clean_branch=clean_branch)
return util.BuilderConfig(
name="{}_build".format(project.capitalize()),
+ locks=locks,
workernames=["generic-worker"], factory=factory)
def compute_build_infos(project):
environment = props["environment"] if props.hasProperty("environment") else "integration"
return E.PUPPET_HOST.get(environment, "host.invalid")
-def deploy_factory(project):
+def deploy_factory(project, locks=[]):
package_dest = util.Interpolate("{0}/%(prop:build)s".format(E.RELEASE_PATH))
factory = util.BuildFactory()
build_hash=util.Property("build_hash"), ldap_password=util.Secret("ldap")))
factory.addStep(steps.MasterShellCommand(command=[
"ssh", "-o", "UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no", "-o", "CheckHostIP=no", "-i", E.SSH_KEY_PATH, puppet_host]))
- return util.BuilderConfig(name="{}_deploy".format(project.capitalize()), workernames=["deploy-worker"], factory=factory)
+ return util.BuilderConfig(
+ name="{}_deploy".format(project.capitalize()),
+ locks=locks,
+ workernames=["deploy-worker"], factory=factory)
from twisted.internet import defer
from buildbot.process.buildstep import FAILURE