]> git.immae.eu Git - perso/Immae/Config/Nix.git/commitdiff
Add lock for buildbot caldance builds
authorIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 9 Jun 2019 10:37:53 +0000 (12:37 +0200)
committerIsmaël Bouya <ismael.bouya@normalesup.org>
Sun, 9 Jun 2019 10:38:14 +0000 (12:38 +0200)
modules/private/buildbot/projects/caldance/__init__.py

index 2c0bad5b8bcb370d1369a034d7174d9915734e30..8d4e8044f11fe740b028ecf51575c635b478eb84 100644 (file)
@@ -77,14 +77,16 @@ def configure(c):
     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",
@@ -96,7 +98,7 @@ def configure(c):
         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)
@@ -111,6 +113,7 @@ def factory(project, ignore_fails=False):
 
     return util.BuilderConfig(
             name="{}_build".format(project.capitalize()),
+            locks=locks,
             workernames=["generic-worker"], factory=factory)
 
 def compute_build_infos(project):
@@ -133,7 +136,7 @@ def puppet_host(props):
     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()
@@ -144,7 +147,10 @@ def deploy_factory(project):
         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