Пример #1
0
    def get_build(self, build_id):
        """
        Returns a build by id
        :param build_id: The id for the build whose status we are getting
        :type build_id: int
        :rtype: Build
        """
        build = BuildStore.get(build_id)
        if build is None:
            raise ItemNotFoundError('Invalid build id: {}.'.format(build_id))

        return build
    def get_path_for_build_results_archive(self, build_id: int, is_tar_request: bool=False) -> str:
        """
        Given a build id, get the absolute file path for the archive file containing the build results.

        :param build_id: The build id for which to retrieve the artifacts archive file
        :param is_tar_request: If true, download the tar.gz archive instead of a zip.
        :return: The path to the archived results file
        """
        build = BuildStore.get(build_id)
        if build is None:
            raise ItemNotFoundError('Invalid build id.')

        archive_file = build.artifacts_tar_file if is_tar_request else build.artifacts_zip_file
        if archive_file is None:
            raise ItemNotReadyError('Build artifact file is not yet ready. Try again later.')

        return archive_file
Пример #3
0
    def handle_request_to_update_build(self, build_id, update_params):
        """
        Updates the state of a build with the values passed in.  Used for cancelling running builds.

        :type build_id: int
        :param update_params: The fields that should be updated and their new values
        :type update_params: dict [str, str]
        :return: The success/failure and the response we want to send to the requestor
        :rtype: tuple [bool, dict [str, str]]
        """
        build = BuildStore.get(int(build_id))
        if build is None:
            raise ItemNotFoundError('Invalid build id.')

        success, response = build.validate_update_params(update_params)
        if not success:
            return success, response
        return build.update_state(update_params), {}
 def handle_result_reported_from_slave(self, slave_url, build_id, subjob_id, payload=None):
     """
     Process the result and dispatch the next subjob
     :type slave_url: str
     :type build_id: int
     :type subjob_id: int
     :type payload: dict
     :rtype: str
     """
     self._logger.info('Results received from {} for subjob. (Build {}, Subjob {})', slave_url, build_id, subjob_id)
     build = BuildStore.get(int(build_id))
     slave = self._slave_registry.get_slave(slave_url=slave_url)
     try:
         build.complete_subjob(subjob_id, payload)
     finally:
         scheduler = self._scheduler_pool.get(build)
         self._thread_pool_executor.submit(scheduler.execute_next_subjob_or_free_executor,
                                           slave=slave)