From: hyokeun Date: Tue, 12 Sep 2017 04:16:17 +0000 (+0900) Subject: TPE-317 ABS: Full build check mail noti X-Git-Tag: submit/trunk/20190927.012743~295 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F68%2F149268%2F1;p=services%2Fjenkins-scripts.git TPE-317 ABS: Full build check mail noti Change-Id: If32ed30ff4591361ff0cbc04fd6bd2e4fb7462b9 --- diff --git a/abs/job_abs_build.py b/abs/job_abs_build.py index f3a25d2..0b7c50a 100644 --- a/abs/job_abs_build.py +++ b/abs/job_abs_build.py @@ -470,18 +470,6 @@ def generate_spec_file(tizen_studio, src_git, prop, data): def post_processing(tizen_studio, src_git, prop, data, builddir, mailer, build): """ Create SR of the generated tpks thru git tagging """ - rs_ver, fail_title, fail_log = tizen_studio.gather_build_result() - print 'VM returned [%s] [%s] [%s]\n' % (rs_ver, fail_title, fail_log) - - mailer.add_message('SDK Rootstrap Version: %s' % rs_ver) - - if tizen_studio.build_result != 0 and fail_title != None: - print 'App Build Fail' - mailer.add_title(fail_title) - mailer.add_message('Result: FAIL') - mailer.add_message('\n\n%s' % fail_log) - return - print 'TizenStudio: builddir: %s' % tizen_studio.builddir spec = generate_spec_file(tizen_studio, src_git, prop, data) @@ -711,12 +699,29 @@ def start_build(fields): build_mode=os.getenv('BUILD_MODE'), \ parallel_jobs=parallel_jobs) print '[ TizenStudio END ] %s' % (str(datetime.now())) + print ret + + rs_ver, fail_title, fail_log = my_tizen_studio.gather_build_result() + print 'VM returned [%s] [%s] [%s]\n' % (rs_ver, fail_title, fail_log) + + mailer.add_message('SDK Rootstrap Version: %s' % rs_ver) + + if my_tizen_studio.build_result != 0 and fail_title != None: + print 'App Build Fail' + mailer.add_title(fail_title) + mailer.add_message('Result: FAIL') + mailer.add_message('\n\n%s' % fail_log) if data.get('buildcheck', None) == None and data.get('type', None) == 'SUBMIT': + # Send mail only for failed build + if 'FAIL' in mailer.email_title: + mailer.send_mail() + return 2 post_processing(my_tizen_studio, src_git, project_properties, data, builddir, mailer, build) # Send mail only for failed build if 'FAIL' in mailer.email_title: mailer.send_mail() + return 3 if 'FAIL' in mailer.email_title: return 1 diff --git a/abs/job_abs_update.py b/abs/job_abs_update.py index fe006c9..5b5b555 100644 --- a/abs/job_abs_update.py +++ b/abs/job_abs_update.py @@ -18,6 +18,7 @@ import ast import xml.etree.cElementTree as ET import inspect from random import randint +from jenkinsapi.jenkins import Jenkins sys.path.insert(1, os.path.join(sys.path[0], '..')) @@ -28,6 +29,7 @@ from common.git import Git, clone_gitproject from common.send_mail import prepare_mail, makemail from common.gerrit import GerritEnv from common.tizen_studio import TizenStudio +from common.workflow import MailSender def list_all_packages(profile, gerrit_env): @@ -61,8 +63,103 @@ def list_all_packages(profile, gerrit_env): 'package': _pkg}) return list_all +def build_result_report(build_number): + + build_result = [] + reason = None + target = None + branch = None + + jenkins_server = Jenkins(os.getenv('JENKINS_URL'), os.getenv('JENKINS_USER'), os.getenv('JENKINS_PW')) + build_abs = jenkins_server[os.getenv('JOB_NAME')].get_build(int(build_number)) + for action in build_abs.get_actions().get('triggeredBuilds'): + single_job = action.get('url').split('/')[-3] + single_build_number = int(action.get('number')) + single_build = jenkins_server[single_job].get_build(single_build_number) + single_build_result = single_build.get_status() + print single_job, single_build_number, single_build_result + sys.stdout.flush() + + if single_build_result != 'SUCCESS': + + # parameters + package = None + project = None + for parm in single_build.get_actions().get('parameters'): + if 'name' in parm and parm['name'] == 'TRIGGER_INFO': + json = ast.literal_eval(base64.b64decode(parm.get('value')).replace('null', '\"none\"')) + reason = json.get('full_build') + project = json.get('event').get('GERRIT_PROJECT') + target = json.get('obs_project') + package = json.get('obs_package') + branch = json.get('branch') + + single_build_log = single_build.get_console() + + # log trimming + exp = r'/home/build/tizen-sdk-cli/tools/smart-build-interface/../../platforms/[a-zA-Z-0-9./]{1,}/rootstraps/[a-zA-Z]{1,}-[0-9.]{1,}-(emulator|device).core.private.[0-9_]{1,}' + single_build_log = re.sub(exp, '{ROOTSTRAP}', single_build_log) + exp = r'/home/build/tizen-sdk-cli/tools/smart-build-interface/../' + single_build_log = re.sub(exp, '{BUILDTOOL}', single_build_log) + if single_build_log.rfind('ERROR: No "profile" tag in property file') != -1: + single_build_log = single_build_log[single_build_log.rfind('ERROR: No "profile" tag in property file'):] + + start_idx = single_build_log.rfind('VM returned [') + if start_idx <= -1: start_idx = 0 + start_idx = len(single_build_log) - 2048 + if start_idx <= -1: start_idx = 0 + end_idx = single_build_log.rfind('Total time') + single_build_log = single_build_log[start_idx:end_idx] + + trimmed_log = [] + for line in single_build_log.split('\n'): + if 'Finished building: ' in line: continue + if line.endswith('^'): continue + trimmed_log.append(line) + single_build_log = '\n'.join(trimmed_log) + + build_result.append({'number': single_build_number, \ + 'result': single_build_result, \ + 'project': project, \ + 'package': package, \ + 'log': '%s' % single_build_log}) + del single_build_log + del single_build + + if len(build_result) <= 0: + return 0 + + mymail = MailSender() + mymail.add_title('ABS Build check %d errors for %s' % (len(build_result), reason)) + mymail.add_message('App Build System(ABS) reports entire project build.\n' \ + 'It is intended for build check with new private rootstrap.\n' \ + '(Base souce code from the most recent accepted SR)\n\n') + mymail.add_message('Full build cause: %s\n' % reason) + mymail.add_message('OBS Target Project: %s\n' % target) + mymail.add_message('branch: %s\n\n' % branch) + + log_size = 0 + for x in build_result: + sys.stdout.flush() + mymail.add_message('\n\n[ %s ] [%s]\n=========' % (x.get('project'), x.get('result'))) + mymail.add_message(x.get('log')) + log_size += len(x.get('log')) + print 'Log Size: %d' % log_size + + mymail.add_message('\n\n--------------------------------------------------------\n'\ + 'Automatically generated by backend service.\n'\ + 'Please DO NOT Reply!') + + mymail.add_receiver(os.getenv('ABS_MAILINGLIST').split(',')) + mymail.send_mail() + + return 2 + def main(new_rs, gerrit_name): + if os.getenv('BUILD_RESULT_REPORT', None): + return build_result_report(os.getenv('BUILD_RESULT_REPORT')) + if gerrit_name.startswith('public_gerrit'): gerrit_infra = 'PUBLIC' gerrit_env = GerritEnv('PUBLIC_') @@ -131,7 +228,10 @@ def main(new_rs, gerrit_name): % (int(os.getenv('BUILD_NUMBER')), index, trigger_data['source']['package']), \ trigger_data) + trigger_next('ABS_BUILD_RESULT', {'Empty': 'Blank'}, extra_params={'BUILD_RESULT_REPORT': os.getenv('BUILD_NUMBER')}) + if __name__ == '__main__': sys.exit(main(os.getenv('NEW_ROOTSTRAP'), os.getenv('GERRIT_INFRA'))) +