From: Junghyun Kim Date: Mon, 6 Mar 2017 05:24:40 +0000 (+0900) Subject: [BuildMonitor] Update unresolvable/broken status by buildmonitor X-Git-Tag: submit/trunk/20190927.012743~527 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8991ae6567a0961e44f3c9a918063f0e1c70d07e;p=services%2Fjenkins-scripts.git [BuildMonitor] Update unresolvable/broken status by buildmonitor PROBLEM: If OBS generates unresolvable/broken events, too many events can be generated during building. SOLUTION: To prohibit this, instead of OBS, snapshot jobs in Jenkins (pre-release-create and create-snapshot) update those build statuses. Change-Id: I97ee4346d37c0919064b79173b7042c49dc7a4ae Signed-off-by: Junghyun Kim --- diff --git a/common/buildservice.py b/common/buildservice.py index a72f8ba..0f2a58c 100755 --- a/common/buildservice.py +++ b/common/buildservice.py @@ -457,7 +457,7 @@ class BuildService(OSC): root = ElementTree.parse(_file).getroot() return [node.get('name') for node in root.findall('entry')] - def get_package_build_result(self, project): + def get_package_build_result(self, project, status_filter=None): """ Get built result of the project """ url = core.makeurl(self.apiurl, ['build', project, '_result']) @@ -475,7 +475,8 @@ class BuildService(OSC): for package_status in project_status.findall('status'): package_name = package_status.attrib['package'] package_status = package_status.attrib['code'] - build_result[repo][arch][package_name] = package_status + if status_filter == None or package_status in status_filter: + build_result[repo][arch][package_name] = package_status return build_result diff --git a/job_buildmonitor.py b/job_buildmonitor.py index 79fb766..efc0ba8 100644 --- a/job_buildmonitor.py +++ b/job_buildmonitor.py @@ -1156,6 +1156,31 @@ def update_build_log(content): query_data = (build_log_url, build_target_id, info_package_id) buildmonitor_db.do_query(query, query_data) +def update_unresolvable_broken_packages(project, unresolvable_broken_packages): + + # get curr_info_project_id -> get curr_build_project_id for multi profile + query = "SELECT id FROM info_project WHERE project_name = %s" + query_data = (project,) + curr_info_project_id = buildmonitor_db.get_value_from_query_data(query, query_data) + query = "SELECT id FROM build_project WHERE info_project_id = %s ORDER BY id DESC LIMIT 1" + query_data = (curr_info_project_id,) + curr_build_project_id = buildmonitor_db.get_value_from_query_data(query, query_data) + + for repo in unresolvable_broken_packages: + for arch in unresolvable_broken_packages[repo]: + for p in unresolvable_broken_packages[repo][arch]: + status = unresolvable_broken_packages[repo][arch][p] + + query = "INSERT INTO build_package (build_target_id, info_package_id, start_time," \ + "end_time, build_status) VALUES ("\ + "(SELECT id FROM build_target WHERE build_project_id=%s AND repository=%s "\ + "AND arch=%s ORDER BY id DESC LIMIT 1), "\ + "(SELECT id FROM info_package WHERE info_project_id=%s AND package_name=%s "\ + "AND active_flag='Y' ORDER BY id DESC LIMIT 1), "\ + "NOW(), NOW(), %s)" + query_data = (curr_build_project_id, repo, arch, curr_info_project_id, p, status) + buildmonitor_db.do_query(query, query_data) + #=============================================================================== # [TRBS][job_submit.py] @@ -1721,6 +1746,7 @@ def main(): bm_git_tag = content.get("bm_git_tag") bm_start_datetime = content.get("bm_start_datetime") bBuildFail = content.get("bBuildFail") + unresolvable_broken_packages = content.get("unresolvable_broken_packages") # func call if bm_stage == 'Pre_Snap_Start': @@ -1744,6 +1770,8 @@ def main(): print '[%s] Build failed!! skip insert build_snapshot_id\n' \ % (__file__) + update_unresolvable_broken_packages(project, unresolvable_broken_packages) + elif bm_stage == 'Pre_Snap_End' or bm_stage == '[TRBS]_Pre_Snap_End': print '[%s][Pre_Snap_End]\n' % (__file__) @@ -1903,9 +1931,13 @@ def main(): # get vars project = content.get("project") bm_start_datetime = content.get("bm_start_datetime") + unresolvable_broken_packages = content.get("unresolvable_broken_packages") # func call start_create_snapshot_for_sr_stage(project, bm_start_datetime) + + update_unresolvable_broken_packages(project, unresolvable_broken_packages) + elif bm_stage == 'Post_Snap_snapshot': print '[%s][Post_Snap_snapshot]\n' % (__file__) project = content.get("project") diff --git a/job_create_snapshot.py b/job_create_snapshot.py index 7c9d1a0..3ea297d 100755 --- a/job_create_snapshot.py +++ b/job_create_snapshot.py @@ -292,6 +292,8 @@ def main(): project = content.get("project") + build = BuildService(obs_api, obs_user, obs_passwd) + if buildmonitor_enabled: global bm_project # for update_fail_xxx bm_project = project @@ -300,12 +302,11 @@ def main(): bm_data = {"bm_stage" : bm_stage, "bm_stage_func" : 'start_create_snapshot_for_sr_stage', "project" : project, - "bm_start_datetime" : str(bm_start_datetime) + "bm_start_datetime" : str(bm_start_datetime), + "unresolvable_broken_packages": build.get_package_build_result(project, ["unresolvable", "broken"]) } trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data) - build = BuildService(obs_api, obs_user, obs_passwd) - # Init backend database redis_host = os.getenv("REDIS_HOST") redis_port = int(os.getenv("REDIS_PORT")) diff --git a/job_pre_release_obs.py b/job_pre_release_obs.py index c4e9727..bbb4afb 100755 --- a/job_pre_release_obs.py +++ b/job_pre_release_obs.py @@ -464,6 +464,7 @@ def main(action): "bm_git_tag" : bm_git_tag, "bm_start_datetime": str(bm_start_datetime), "bBuildFail": bBuildFail, + "unresolvable_broken_packages": build.get_package_build_result(project, ["unresolvable", "broken"]) } trigger_next("BUILD-MONITOR-1-%s" % bm_stage, bm_data)