コード例 #1
0
 def test_get_image_name(self):
     host = 'foo'
     image_name = get_image_name(build_job=self.build_job,
                                 registry_host=host)
     expected_name = '{}/{}_{}'.format(host, self.build_job.project.name,
                                       self.build_job.project.id)
     assert image_name == expected_name
コード例 #2
0
 def test_get_image_image_info(self):
     image_info = get_image_info(build_job=self.build_job,
                                 registry_host='some_host')
     assert image_info[0] == get_image_name(build_job=self.build_job,
                                            registry_host='some_host')
     assert image_info[1] == self.build_job.uuid.hex
コード例 #3
0
def start_dockerizer(build_job):
    # Update job status to show that its started
    build_job.set_status(JobLifeCycle.SCHEDULED)
    spawner_class = get_spawner_class(build_job.backend)

    try:
        registry_spec = get_registry_context(build_backend=build_job.backend)
    except ContainerRegistryError:
        build_job.set_status(
            JobLifeCycle.FAILED,
            message=
            'Could not start the dockerizer job, please check your registry configuration.'
        )
        return

    spawner = spawner_class(project_name=build_job.project.unique_name,
                            project_uuid=build_job.project.uuid.hex,
                            job_name=build_job.unique_name,
                            job_uuid=build_job.uuid.hex,
                            commit=build_job.commit,
                            from_image=build_job.build_image,
                            dockerfile_path=build_job.build_dockerfile,
                            context_path=build_job.build_context,
                            image_tag=build_job.uuid.hex,
                            image_name=get_image_name(
                                build_job=build_job,
                                registry_host=registry_spec.host),
                            build_steps=build_job.build_steps,
                            env_vars=build_job.build_env_vars,
                            nocache=build_job.build_nocache,
                            insecure=registry_spec.insecure,
                            creds_secret_ref=registry_spec.secret,
                            creds_secret_items=registry_spec.secret_items,
                            spec=build_job.specification,
                            k8s_config=conf.get(K8S_CONFIG),
                            namespace=conf.get(K8S_NAMESPACE),
                            in_cluster=True,
                            use_sidecar=True)

    error = {}
    try:
        results = spawner.start_dockerizer(
            resources=build_job.resources,
            node_selector=build_job.node_selector,
            affinity=build_job.affinity,
            tolerations=build_job.tolerations)
        auditor.record(event_type=BUILD_JOB_STARTED, instance=build_job)
        build_job.definition = get_job_definition(results)
        build_job.save(update_fields=['definition'])
        return True
    except ApiException:
        _logger.error(
            'Could not start build job, please check your polyaxon spec',
            exc_info=True)
        error = {
            'raised':
            True,
            'traceback':
            traceback.format_exc(),
            'message':
            'Could not start build job, encountered a Kubernetes ApiException.'
        }
    except VolumeNotFoundError as e:
        _logger.error(
            'Could not start build job, please check your volume definitions.',
            exc_info=True)
        error = {
            'raised':
            True,
            'traceback':
            traceback.format_exc(),
            'message':
            'Could not start build job, encountered a volume definition problem. %s'
            % e
        }
    except Exception as e:
        _logger.error(
            'Could not start build job, please check your polyaxon spec.',
            exc_info=True)
        error = {
            'raised':
            True,
            'traceback':
            traceback.format_exc(),
            'message':
            'Could not start build job encountered an {} exception.'.format(
                e.__class__.__name__)
        }
    finally:
        if error.get('raised'):
            build_job.set_status(JobLifeCycle.FAILED,
                                 message=error.get('message'),
                                 traceback=error.get('traceback'))