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, '准备构建中,耐心等待'
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)
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)