Prepare the build worker to support multiple tags and subdirectories. Change the build database config to accept a job config object instead of breaking out the parameters into independent blocks.

This commit is contained in:
jakedt 2014-02-24 16:11:23 -05:00
parent 4b0f4c0a7b
commit 13dea98499
9 changed files with 114 additions and 53 deletions

View file

@ -1,10 +1,12 @@
import logging
import stripe
import urlparse
import json
from flask import request, make_response, Blueprint
from data import model
from data.queue import dockerfile_build_queue
from auth.auth import process_auth
from auth.permissions import ModifyRepositoryPermission
from util.invoice import renderInvoiceToHtml
@ -62,22 +64,36 @@ def build_trigger_webhook(namespace, repository, trigger_uuid):
logger.debug('Passing webhook request to handler %s', handler)
try:
df_id, tag, name = handler.handle_trigger_request(request,
trigger.auth_token,
trigger.config)
specs = handler.handle_trigger_request(request, trigger.auth_token,
json.loads(trigger.config))
dockerfile_id, tags, name, subdir = specs
except ValidationRequestException:
# This was just a validation request, don't need to build anything
# This was just a validation request, we don't need to build anything
return make_response('Okay')
host = urlparse.urlparse(request.url).netloc
full_tag = '%s/%s/%s:%s' % (host, trigger.repository.namespace,
trigger.repository.name, tag)
repo = '%s/%s/%s' % (host, trigger.repository.namespace,
trigger.repository.name)
token = model.create_access_token(trigger.repository, 'write')
logger.debug('Creating build %s with full_tag %s and dockerfile_id %s',
name, full_tag, df_id)
model.create_repository_build(trigger.repository, token, df_id, full_tag,
name)
logger.debug('Creating build %s with repo %s tags %s and dockerfile_id %s',
name, repo, tags, dockerfile_id)
job_config = {
'docker_tags': tags,
'repository': repo,
'build_subdir': subdir,
'resource_key': dockerfile_id,
}
build_request = model.create_repository_build(trigger.repository, token,
job_config, name)
dockerfile_build_queue.put(json.dumps({
'build_uuid': build_request.uuid,
'namespace': namespace,
'repository': repository,
}), retries_remaining=1)
return make_response('Okay')