Child images should not be built if parent build failed
Change-Id: Ief35fcf2acb23aea8305096b59b7d9f876ba4d98
This commit is contained in:
parent
c82a1b1b65
commit
fb0d94f51c
@ -227,8 +227,14 @@ def process_dockerfile(dockerfile, tmp_dir, config, executor, future_list,
|
|||||||
for child in dockerfile['children']:
|
for child in dockerfile['children']:
|
||||||
if child['match'] or (CONF.builder.keep_image_tree_consistency and
|
if child['match'] or (CONF.builder.keep_image_tree_consistency and
|
||||||
child['name'] in ready_images):
|
child['name'] in ready_images):
|
||||||
submit_dockerfile_processing(child, tmp_dir, config, executor,
|
if dockerfile['build_result'] == 'Failure':
|
||||||
future_list, ready_images)
|
LOG.error("%s: Build will be skipped due to parent image (%s) "
|
||||||
|
"build failure", child['name'], dockerfile['name'])
|
||||||
|
child['build_result'] = 'Failure'
|
||||||
|
child['push_result'] = 'Failure'
|
||||||
|
else:
|
||||||
|
submit_dockerfile_processing(child, tmp_dir, config, executor,
|
||||||
|
future_list, ready_images)
|
||||||
|
|
||||||
|
|
||||||
def submit_dockerfile_processing(dockerfile, tmp_dir, config, executor,
|
def submit_dockerfile_processing(dockerfile, tmp_dir, config, executor,
|
||||||
|
@ -101,7 +101,8 @@ class TestBuild(base.TestCase):
|
|||||||
'parent': 'root',
|
'parent': 'root',
|
||||||
'children': ['leaf'],
|
'children': ['leaf'],
|
||||||
'match': True,
|
'match': True,
|
||||||
'path': '/tmp'
|
'path': '/tmp',
|
||||||
|
'build_result': 'Success'
|
||||||
},
|
},
|
||||||
'leaf': {
|
'leaf': {
|
||||||
'name': 'leaf',
|
'name': 'leaf',
|
||||||
@ -129,6 +130,46 @@ class TestBuild(base.TestCase):
|
|||||||
dockerfiles["leaf"], mock.ANY, mock.ANY, mock.ANY,
|
dockerfiles["leaf"], mock.ANY, mock.ANY, mock.ANY,
|
||||||
mock.ANY, ["root", "middle", "leaf"])
|
mock.ANY, ["root", "middle", "leaf"])
|
||||||
|
|
||||||
|
@mock.patch("docker.Client")
|
||||||
|
@mock.patch("fuel_ccp.build.build_dockerfile")
|
||||||
|
@mock.patch("fuel_ccp.build.submit_dockerfile_processing")
|
||||||
|
@mock.patch("fuel_ccp.build.create_rendered_dockerfile")
|
||||||
|
def test_process_dockerfile_parent_build_failed(
|
||||||
|
self, render_mock, submit_dockerfile_processing_mock,
|
||||||
|
build_dockerfile_mock, dc_mock):
|
||||||
|
dockerfiles = {
|
||||||
|
'parent': {
|
||||||
|
'name': 'parent',
|
||||||
|
'full_name': 'ms/parent',
|
||||||
|
'parent': None,
|
||||||
|
'children': ['child'],
|
||||||
|
'match': True,
|
||||||
|
'path': '/tmp',
|
||||||
|
'build_result': 'Failure'
|
||||||
|
},
|
||||||
|
'child': {
|
||||||
|
'name': 'child',
|
||||||
|
'full_name': 'ms/child',
|
||||||
|
'parent': 'parent',
|
||||||
|
'children': [],
|
||||||
|
'match': True,
|
||||||
|
'path': '/tmp'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for dockerfile in dockerfiles.values():
|
||||||
|
if dockerfile['parent']:
|
||||||
|
dockerfile['parent'] = dockerfiles[dockerfile['parent']]
|
||||||
|
for i in range(len(dockerfile['children'])):
|
||||||
|
dockerfile['children'][i] = (
|
||||||
|
dockerfiles[dockerfile['children'][i]]
|
||||||
|
)
|
||||||
|
|
||||||
|
build.process_dockerfile(
|
||||||
|
dockerfiles["parent"], mock.ANY, mock.ANY, mock.ANY, mock.ANY,
|
||||||
|
[])
|
||||||
|
submit_dockerfile_processing_mock.assert_not_called()
|
||||||
|
|
||||||
@mock.patch("docker.Client")
|
@mock.patch("docker.Client")
|
||||||
@mock.patch("fuel_ccp.build.build_dockerfile")
|
@mock.patch("fuel_ccp.build.build_dockerfile")
|
||||||
@mock.patch("fuel_ccp.build.submit_dockerfile_processing")
|
@mock.patch("fuel_ccp.build.submit_dockerfile_processing")
|
||||||
|
Loading…
Reference in New Issue
Block a user