def Build(self): lyr_imgs = [] lyr_imgs.append(self._base_image) interpreter_builder = package_builder.InterpreterLayerBuilder( venv_dir=self._venv_dir, python_cmd=self._python_cmd, venv_cmd=self._venv_cmd, cache=self._cache) interpreter_builder.BuildLayer() lyr_imgs.append(interpreter_builder.GetImage()) if ftl_util.has_pkg_descriptor(self._descriptor_files, self._ctx): # build interpreter layer if self._is_phase2: # do a phase 2 build of the package layers w/ Pipfile.lock # iterate over package/version Pipfile.lock python_util.setup_venv(self._venv_dir, self._venv_cmd, self._python_cmd) pkgs = self._parse_pipfile_pkgs() with ftl_util.Timing('uploading_all_package_layers'): with concurrent.futures.ThreadPoolExecutor( max_workers=constants.THREADS) as executor: future_to_params = {executor.submit( self._build_pkg, pkg, interpreter_builder, lyr_imgs): pkg for pkg in pkgs } for future in concurrent.futures.as_completed( future_to_params): future.result() else: # do a phase 1 build of the package layers w/ requirements.txt req_txt_builder = package_builder.RequirementsLayerBuilder( ctx=self._ctx, descriptor_files=self._descriptor_files, directory=self._args.directory, pkg_dir=None, wheel_dir=self._wheel_dir, venv_dir=self._venv_dir, python_cmd=self._python_cmd, pip_cmd=self._pip_cmd, venv_cmd=self._venv_cmd, dep_img_lyr=interpreter_builder, cache=self._cache) req_txt_builder.BuildLayer() if req_txt_builder.GetImage(): lyr_imgs.append(req_txt_builder.GetImage()) app = base_builder.AppLayerBuilder( directory=self._args.directory, destination_path=self._args.destination_path, entrypoint=self._args.entrypoint, exposed_ports=self._args.exposed_ports) app.BuildLayer() lyr_imgs.append(app.GetImage()) ftl_image = ftl_util.AppendLayersIntoImage(lyr_imgs) self.StoreImage(ftl_image)
def Build(self): lyr_imgs = [] lyr_imgs.append(self._base_image) if ftl_util.has_pkg_descriptor(self._descriptor_files, self._ctx): # build interpreter layer interpreter_builder = package_builder.InterpreterLayerBuilder( venv_dir=self._venv_dir, python_cmd=self._python_cmd, venv_cmd=self._venv_cmd, cache=self._cache) interpreter_builder.BuildLayer() lyr_imgs.append(interpreter_builder.GetImage()) if self._is_phase2: # do a phase 2 build of the package layers w/ Pipfile.lock # iterate over package/version Pipfile.lock pkgs = self._parse_pipfile_pkgs() for pkg in pkgs: pipfile_builder = package_builder.PipfileLayerBuilder( ctx=self._ctx, descriptor_files=self._descriptor_files, pkg_descriptor=pkg, pkg_dir=None, wheel_dir=ftl_util.gen_tmp_dir(constants.WHEEL_DIR), venv_dir=self._venv_dir, pip_cmd=self._pip_cmd, venv_cmd=self._venv_cmd, dep_img_lyr=interpreter_builder, cache=self._cache) pipfile_builder.BuildLayer() lyr_imgs.append(pipfile_builder.GetImage()) else: # do a phase 1 build of the package layers w/ requirements.txt req_txt_builder = package_builder.RequirementsLayerBuilder( ctx=self._ctx, descriptor_files=self._descriptor_files, pkg_dir=None, wheel_dir=self._wheel_dir, venv_dir=self._venv_dir, python_cmd=self._python_cmd, pip_cmd=self._pip_cmd, venv_cmd=self._venv_cmd, dep_img_lyr=interpreter_builder, cache=self._cache) req_txt_builder.BuildLayer() lyr_imgs.append(req_txt_builder.GetImage()) app = base_builder.AppLayerBuilder( ctx=self._ctx, destination_path=self._args.destination_path, entrypoint=self._args.entrypoint, exposed_ports=self._args.exposed_ports) app.BuildLayer() lyr_imgs.append(app.GetImage()) ftl_image = ftl_util.AppendLayersIntoImage(lyr_imgs) self.StoreImage(ftl_image)