Better build server creation script

This commit is contained in:
Ciaran Gultnieks 2012-09-24 14:04:58 +01:00
parent c1f789033e
commit d91045a550
3 changed files with 58 additions and 14 deletions

View file

@ -1025,12 +1025,15 @@ With this base box installed, you can then go to the @code{fdroidserver}
directory and run this: directory and run this:
@example @example
./makebuildserver.sh ./makebuildserver.py
@end example @end example
This will take a long time - most of it spent installing the necessary parts This will take a long time, and use a lot of bandwidth - most of it spent
of the Android SDK for all the various platforms. Luckily you only need to installing the necessary parts of the Android SDK for all the various
do it occasionally. platforms. Luckily you only need to do it occasionally. Once you have a
working build server image, if the recipes change (e.g. when packages need
to be added) you can just run that script again and the existing one will
be updated in place.
Once it's complete you'll have a new base box called 'buildserver' which is Once it's complete you'll have a new base box called 'buildserver' which is
what's used for the actual builds. You can then build packages as normal, what's used for the actual builds. You can then build packages as normal,

51
makebuildserver.py Executable file
View file

@ -0,0 +1,51 @@
#!/usr/bin/python
import os
import sys
import subprocess
import time
def vagrant(params, cwd=None):
p = subprocess.Popen(['vagrant'] + params, cwd=cwd,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
return (p.returncode, out, err)
boxfile = 'buildserver.box'
serverdir = 'buildserver'
if not os.path.exists('makebuildserver.py') or not os.path.exists(serverdir):
print 'This must be run from the correct directory!'
sys.exit(1)
if os.path.exists(boxfile):
os.remove(boxfile)
vagrant(['halt'], serverdir)
print "Configuring build server VM"
vagrant(['up'], serverdir)
print "Stopping build server VM"
vagrant(['halt'], serverdir)
print "Waiting for build server VM to be finished"
ready = False
while not ready:
time.sleep(2)
returncode, out, err = vagrant(['status'], serverdir)
if returncode != 0:
print "Error while checking status"
sys.exit(1)
for line in out.splitlines():
if line.startswith("default"):
if line.find("poweroff") != -1:
ready = True
else:
print "Status: " + line
print "Packaging"
vagrant(['package', '--output', os.path.join('..', boxfile)], serverdir)
print "Adding box"
vagrant(['box', 'add', 'buildserver', boxfile, '-f'])
os.remove(boxfile)

View file

@ -1,10 +0,0 @@
#!/bin/bash
set -e
rm -f buildserver.box
cd buildserver
vagrant halt
vagrant up
vagrant halt
vagrant package --base `VBoxManage list vms | grep buildserver | sed 's/"\(.*\)".*/\1/'` --output buildserver.box
vagrant box add buildserver buildserver.box -f && rm buildserver.box