Example #1
0
def get_build_info(last_number=0):
    server = _get_server_instance()
    job = server.get_job('build')
    last_one_build = job.__dict__['_data']['builds'][last_number]
    url = last_one_build['url']
    number = last_one_build['number']
    obj = Build(url, number, job)
    para = obj.get_params()
    print(para)
    repo_name = para['REPO_NAME']
    pjt_name = para['PROJECT_NAME']
    status = obj.get_status()
    timestamp = obj.get_timestamp().strftime("%Y-%m-%d %H:%M:%S")
    return (timestamp, repo_name, pjt_name, number, status)
Example #2
0
    def __init__(self, build: Build) -> None:
        """
        Creates a container class for a Jenkins Build object.

        Attributes:
         - timestamp: Build timestamp in UTC
         - number: Build number
         - failed: False if build was successful, True if not
         - failed_tests: List of failed test names

        :param build: A Build object from the Jenkins server
        """

        self.timestamp = build.get_timestamp().strftime('%m-%d-%Y %I:%M %p')
        self.number = build.get_number()

        self.status = build.get_status()
        if self.status == 'SUCCESS':
            self.failed = False
        else:
            self.failed = True

        self.failed_tests = []  # type: List[str]
        self.test_count = 0
        self.fail_count = 0

        if self.status != 'ABORTED' and build.has_resultset():
            self.test_count = build.get_actions()['totalCount']
            self.fail_count = build.get_actions()['failCount']

            result_set = build.get_resultset()

            for _, result in result_set.iteritems():
                test_name = result.identifier()

                if result.status == 'FAILED' or result.status == 'REGRESSION':
                    self.failed_tests.append(test_name)
Example #3
0
def watch_jenkins_job(args, settings, **kwargs):
    from jenkinsapi.jenkins import Jenkins
    from jenkinsapi.jenkins import JenkinsBase
    from jenkinsapi.build import Build
    from jenkinsapi.utils.requester import Requester
    try:
        from urllib.parser import urlparse
    except ImportError:
        from urlparse import urlparse

    parser = argparse.ArgumentParser()
    parser.add_argument('url', type=str, nargs=1, help='Jenkins URL to watch')
    parser.add_argument(
        '--sleep-interval',
        dest='sleep_interval',
        default=30,
        type=int,
        help='Amount of time to sleep',
    )
    parser.add_argument('--retries',
                        dest='retries',
                        default=25,
                        type=int,
                        help='Number of times to re-poll Jenkins')
    options = parser.parse_args(args)

    class NoVerifyRequester(Requester):
        def get_request_dict(self, *args, **kwargs):
            request_dict = super(NoVerifyRequester,
                                 self).get_request_dict(*args, **kwargs)
            request_dict['verify'] = False
            return request_dict

    def get_job_name_and_build_number(url):
        job_build_matcher = re.compile(
            ".*/job/(?P<job>[^/]+)/(?P<build_number>[^/]+)/.*")
        job, build_no = job_build_matcher.search(url).groups()
        return job, int(build_no)

    def get_formal_build_url(jenkins_url, job_name, build_no):
        return os.path.join(jenkins_url, 'job', job_name, str(build_no))

    def get_jenkins_base_url(url):
        parsed = urlparse(url)
        return parsed.scheme + '://' + parsed.netloc

    job_name, build_no = get_job_name_and_build_number(options.url[0])
    jenkins_url = get_jenkins_base_url(options.url[0])
    formal_build_url = get_formal_build_url(jenkins_url, job_name, build_no)

    try:
        jenkins = Jenkins(jenkins_url, requester=NoVerifyRequester())
        job = jenkins[job_name]
        job.RETRY_ATTEMPTS = options.retries
        build = Build(formal_build_url, build_no, job)

        while True:
            if not build.is_running():
                if build.is_good():
                    send_flash_message(
                        settings.device_url, {
                            'message':
                            'Jenkins job %s:%s succeeded' % (
                                job_name,
                                build_no,
                            ),
                            'blink': [(0, 255, 0), (0, 0, 0)],
                            'timeout':
                            20,
                        })
                    logger.warn(
                        'Job %s succeeded',
                        formal_build_url,
                    )
                else:
                    send_flash_message(
                        settings.device_url, {
                            'message':
                            'Jenkins job %s:%s failed (%s)' %
                            (job_name, build_no, build.get_status()),
                            'blink': [(255, 0, 0), (0, 0, 0)],
                            'timeout':
                            20,
                        })
                    logger.warn(
                        'Job %s failed',
                        formal_build_url,
                    )
                sys.exit(0)
            time.sleep(options.sleep_interval)
    except Exception as e:
        logger.exception(e)
Example #4
0
def watch_jenkins_job(args, settings, **kwargs):
    from jenkinsapi.jenkins import Jenkins
    from jenkinsapi.jenkins import JenkinsBase
    from jenkinsapi.build import Build
    from jenkinsapi.utils.requester import Requester
    try:
        from urllib.parser import urlparse
    except ImportError:
        from urlparse import urlparse

    parser = argparse.ArgumentParser()
    parser.add_argument(
        'url',
        type=str,
        nargs=1,
        help='Jenkins URL to watch'
    )
    parser.add_argument(
        '--sleep-interval',
        dest='sleep_interval',
        default=30,
        type=int,
        help='Amount of time to sleep',
    )
    parser.add_argument(
        '--retries',
        dest='retries',
        default=25,
        type=int,
        help='Number of times to re-poll Jenkins'
    )
    options = parser.parse_args(args)

    class NoVerifyRequester(Requester):
        def get_request_dict(self, *args, **kwargs):
            request_dict = super(NoVerifyRequester, self).get_request_dict(
                *args, **kwargs
            )
            request_dict['verify'] = False
            return request_dict

    def get_job_name_and_build_number(url):
        job_build_matcher = re.compile(
            ".*/job/(?P<job>[^/]+)/(?P<build_number>[^/]+)/.*"
        )
        job, build_no = job_build_matcher.search(url).groups()
        return job, int(build_no)

    def get_formal_build_url(jenkins_url, job_name, build_no):
        return os.path.join(
            jenkins_url,
            'job',
            job_name,
            str(build_no)
        )

    def get_jenkins_base_url(url):
        parsed = urlparse(url)
        return parsed.scheme + '://' + parsed.netloc

    job_name, build_no = get_job_name_and_build_number(options.url[0])
    jenkins_url = get_jenkins_base_url(options.url[0])
    formal_build_url = get_formal_build_url(
        jenkins_url,
        job_name,
        build_no
    )

    try:
        jenkins = Jenkins(
            jenkins_url,
            requester=NoVerifyRequester()
        )
        job = jenkins[job_name]
        job.RETRY_ATTEMPTS = options.retries
        build = Build(formal_build_url, build_no, job)

        while True:
            if not build.is_running():
                if build.is_good():
                    send_flash_message(
                        settings.device_url,
                        {
                            'message': 'Jenkins job %s:%s succeeded' % (
                                job_name,
                                build_no,
                            ),
                            'blink': [(0, 255, 0), (0, 0, 0)],
                            'timeout': 20,
                        }
                    )
                    logger.warn(
                        'Job %s succeeded',
                        formal_build_url,
                    )
                else:
                    send_flash_message(
                        settings.device_url,
                        {
                            'message': 'Jenkins job %s:%s failed (%s)' % (
                                job_name,
                                build_no,
                                build.get_status()
                            ),
                            'blink': [(255, 0, 0), (0, 0, 0)],
                            'timeout': 20,
                        }
                    )
                    logger.warn(
                        'Job %s failed',
                        formal_build_url,
                    )
                sys.exit(0)
            time.sleep(options.sleep_interval)
    except Exception as e:
        logger.exception(e)