diff --git a/buildserver/buildserver.py b/buildserver/buildserver.py index 2ac90e9fc..0c9a6f081 100644 --- a/buildserver/buildserver.py +++ b/buildserver/buildserver.py @@ -218,4 +218,4 @@ def get_all_status(): if __name__ == '__main__': logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT) - app.run(host='0.0.0.0', port=5002, debug=True) + app.run(host='0.0.0.0', port=5002, debug=True, threaded=True) diff --git a/buildserver/startserver b/buildserver/startserver index 4947a618a..9eb2e1114 100644 --- a/buildserver/startserver +++ b/buildserver/startserver @@ -45,4 +45,4 @@ done popd docker -d & -exec venv/bin/python buildserver.py 2> buildserver.log \ No newline at end of file +exec venv/bin/python buildserver.py \ No newline at end of file diff --git a/workers/dockerfilebuild.py b/workers/dockerfilebuild.py index 061de0c03..1d4a7a828 100644 --- a/workers/dockerfilebuild.py +++ b/workers/dockerfilebuild.py @@ -58,8 +58,10 @@ def get_status(url): def babysit_builder(request): + """ Spin up a build node and ask it to build our job. Retryable errors + should return False, while fatal errors should return True. + """ try: - logger.debug('Starting work item: %s' % request) repository_build = model.get_repository_build(request['build_id']) logger.debug('Request details: %s' % repository_build) @@ -143,6 +145,11 @@ def babysit_builder(request): else: logger.debug('Pull status was: %s' % pull_status) + # Remove the credentials we used to pull so crafty users cant steal them + remove_auth_cmd = 'rm .dockercfg' + ssh_client.exec_command(remove_auth_cmd) + + # Start the build server start_cmd = 'docker run -d -privileged -lxc-conf="lxc.aa_profile=unconfined" quay.io/quay/buildserver' ssh_client.exec_command(start_cmd) @@ -191,7 +198,7 @@ def babysit_builder(request): # clean up the DO node logger.debug('Cleaning up DO node.') - # droplet.destroy() + droplet.destroy() repository_build.status_url = None repository_build.build_node_id = None; @@ -200,7 +207,9 @@ def babysit_builder(request): return True except Exception as outer_ex: + # We don't really know what these are, but they are probably retryable logger.exception('Exception processing job: %s' % outer_ex.message) + return False def process_work_items(pool): @@ -236,9 +245,7 @@ def start_worker(): sched = Scheduler() sched.start() - # sched.add_interval_job(process_work_items, args=[pool], seconds=30) - - process_work_items(pool) + sched.add_interval_job(process_work_items, args=[pool], seconds=30) while True: time.sleep(60 * 60 * 24) # sleep one day, basically forever