mirror of
https://github.com/odoo/runbot.git
synced 2025-03-15 23:45:44 +07:00
[IMP] runbot: small change of docker_build api
returns now a dict instead of a tuple for easier extension
This commit is contained in:
parent
e4b04a42d1
commit
14bac37438
@ -110,19 +110,31 @@ def _docker_build(build_dir, image_tag):
|
||||
:param image_tag: name used to tag the resulting docker image
|
||||
:return: tuple(success, msg) where success is a boolean and msg is the error message or None
|
||||
"""
|
||||
result = {
|
||||
'image': False,
|
||||
'msg': '',
|
||||
}
|
||||
docker_client = docker.from_env()
|
||||
start = time.time()
|
||||
try:
|
||||
docker_image, result_stream = docker_client.images.build(path=build_dir, tag=image_tag, rm=True)
|
||||
result_stream = list(result_stream)
|
||||
msg = ''.join([r.get('stream', '') for r in result_stream])
|
||||
return docker_image, msg
|
||||
result['image'] = docker_image
|
||||
result['msg'] = msg
|
||||
except docker.errors.APIError as e:
|
||||
_logger.error('Build of image %s failed', image_tag)
|
||||
return (False, e.explanation)
|
||||
result['msg'] = e.explanation
|
||||
except docker.errors.BuildError as e:
|
||||
_logger.error('Build of image %s failed', image_tag)
|
||||
msg = f"{''.join(l.get('stream') or '' for l in e.build_log)}\nERROR:{e.msg}"
|
||||
return (False, msg)
|
||||
result['msg'] = msg
|
||||
|
||||
duration = time.time() - start
|
||||
if duration > 1:
|
||||
_logger.info('Dockerfile %s finished build in %s', image_tag, duration)
|
||||
result['duration'] = duration
|
||||
return result
|
||||
|
||||
def docker_push(image_tag):
|
||||
return _docker_push(image_tag)
|
||||
|
@ -289,7 +289,6 @@ class Dockerfile(models.Model):
|
||||
})
|
||||
|
||||
def _build(self, host=None):
|
||||
start = time.time()
|
||||
docker_build_path = self.env['runbot.runbot']._path('docker', self.image_tag)
|
||||
os.makedirs(docker_build_path, exist_ok=True)
|
||||
|
||||
@ -298,15 +297,14 @@ class Dockerfile(models.Model):
|
||||
with open(self.env['runbot.runbot']._path('docker', self.image_tag, 'Dockerfile'), 'w') as Dockerfile:
|
||||
Dockerfile.write(content)
|
||||
|
||||
docker_build_identifier, msg = docker_build(docker_build_path, self.image_tag)
|
||||
duration = time.time() - start
|
||||
result = docker_build(docker_build_path, self.image_tag)
|
||||
docker_build_identifier = result['image']
|
||||
duration = result['duration']
|
||||
msg = result['msg']
|
||||
docker_build_result_values = {'dockerfile_id': self.id, 'output': msg, 'duration': duration, 'content': content, 'host_id': host and host.id}
|
||||
duration = time.time() - start
|
||||
if docker_build_identifier:
|
||||
docker_build_result_values['result'] = 'success'
|
||||
docker_build_result_values['identifier'] = docker_build_identifier.id
|
||||
if duration > 1:
|
||||
_logger.info('Dockerfile %s finished build in %s', self.image_tag, duration)
|
||||
else:
|
||||
docker_build_result_values['result'] = 'error'
|
||||
self.to_build = False
|
||||
|
Loading…
Reference in New Issue
Block a user