Refactor a lot of the build create code out into a common method. Add an endpoint for manually starting triggers.

This commit is contained in:
jakedt 2014-02-25 19:39:43 -05:00
parent a6128978cb
commit 011490d36d
4 changed files with 150 additions and 84 deletions

View file

@ -1,6 +1,5 @@
import logging
import stripe
import urlparse
import json
from flask import request, make_response, Blueprint
@ -14,6 +13,7 @@ from util.email import send_invoice_email
from util.names import parse_repository_name
from util.http import abort
from endpoints.trigger import BuildTrigger, ValidationRequestException
from endpoints.common import start_build
logger = logging.getLogger(__name__)
@ -65,46 +65,16 @@ def build_trigger_webhook(namespace, repository, trigger_uuid):
logger.debug('Passing webhook request to handler %s', handler)
config_dict = json.loads(trigger.config)
try:
specs = handler.handle_trigger_request(request, trigger.auth_token, config_dict)
specs = handler.handle_trigger_request(request, trigger.auth_token,
config_dict)
dockerfile_id, tags, name, subdir = specs
except ValidationRequestException:
# This was just a validation request, we don't need to build anything
return make_response('Okay')
host = urlparse.urlparse(request.url).netloc
repo_path = '%s/%s/%s' % (host, trigger.repository.namespace,
trigger.repository.name)
token = model.create_access_token(trigger.repository, 'write')
logger.debug('Creating build %s with repo %s tags %s and dockerfile_id %s',
name, repo_path, tags, dockerfile_id)
job_config = {
'docker_tags': tags,
'repository': repo,
'build_subdir': subdir,
}
build_request = model.create_repository_build(trigger.repository, token,
job_config, dockerfile_id,
name, trigger)
dockerfile_build_queue.put(json.dumps({
'build_uuid': build_request.uuid,
'namespace': namespace,
'repository': repository,
}), retries_remaining=1)
metadata = {
'repo': repository,
'namespace': namespace,
'trigger_id': trigger_uuid,
'fileid': dockerfile_id,
'config': config_dict,
'service': trigger.service.name
}
repo = model.get_repository(namespace, repository)
model.log_action('build_dockerfile', namespace, ip=request.remote_addr, metadata=metadata, repository=repo)
start_build(repo, dockerfile_id, tags, name, subdir, False, trigger)
return make_response('Okay')