Example #1
0
def get_build_result(name, url, number):
    server = get_server_instance()
    job = server.get_job(name)
    try:
        obj = Build(url, number, job)
        console = obj.get_console()
        if obj.is_running():
            return console, False, '构建中'
        elif obj.is_good():
            return console, True, '构建成功'
        else:
            return console, False, '构建失败'
    except:
        return '准备构建中,耐心等待', False, '准备构建中,耐心等待'
Example #2
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 #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)