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)
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)
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)