# coding:utf-8
import os
import sys
import jenkins
import jenkins_moudle
import yaml
import xml.dom.minidom
from jenkins_moudle.tools import Tools
# 判断是否陪跑。
def is_job_online(branch,component):
# dom = xml.dom.minidom.parse()
pass
# 判断工程是否超过一天
def is_over_one_day(day_job):
pass
# 筛选url,跳过 禁用 没有构建 超过24小时的构建的url, 考虑下这里是否需要使用多线程
def sift_url(url_list):
domain_user = 'admin'
domain_password = 'xxxxx'
total_url_list = []
for url in url_list :
try :
one_job = jenkins_moudle.JobInfo.init_URL(url,domain_user,domain_password)
# 跳过禁用的工程
if not one_job.get_is_able():
continue
# 跳过没有构建的工程
if not len(one_job.get_builds_number_list()):
continue
# 跳过超过24小时没有构建的工程
last_build = jenkins_moudle.BuildInfo.init_URL(one_job.detail_Dict.get('lastBuild',{}).get('url',''))
if last_build.build_start_time < Tools.get_current_timestamp() - 86400:
continue
# last_build_timestamp = one_job.buildsInstance.get(one_job.get_lastBuild_number()).build_start_time
# if last_build_timestamp < Tools.get_current_timestamp() - 86400:
# continue
total_url_list.append(url)
except Exception as e:
print 'fail:%s' %url
return total_url_list
# 放入类中了,可以不在这里写。
def juge_all_fail(buildsInstance):
'''
判断所有构建是否失败,
:param buildsInstance:{1:buildobject1,2:buildobject2}
:return:True or False
'''
for number,build in buildsInstance.items():
if build.build_result == 'SUCCESS':
return False
return True
# 也放入类中了
def is_job_type(buildsInstance):
ch_list = []
tag_list = []
for number,build in buildsInstance.items():
try:
changeid = build.get_build_one_parmas('GERRIT_CHANGE_ID','')
if len(changeid) == 41:
ch_list.append(number)
else:
tag_list.append(number)
except:
return 'all_tag'
if not ch_list:
return 'all_tag'
return 'not_all_tag'
def check_every_job(url):
domain_user = 'admin'
domain_password = 'xxxx'
one_job = jenkins_moudle.Analyze_Job_Builds.init_URL(url, domain_user, domain_password)
# 1.先取出前20个build(排除被abort的和正在运行的构建)
one_job.get_limit_no_running_numbers(20)
# one_job.get_limit_numbers(20)
print one_job.buildsInstance.keys()
# 2.判断是否全部失败,如果失败,则直接返回False:则job挂了
if one_job.juge_all_fail():
print 'url: %s -->挂了'%url
return False
# for number,build in one_job.buildsInstance.items():
# print build.get_build_one_parmas('GERRIT_CHANGE_ID')
# 3. 判断job如果是全部都是tag
# print one_job.is_job_type()
if one_job.is_job_type() == 'all_tag':
# 取出前5个(可能小于5),判断是否全部失败,如果失败则job挂了。
one_job.get_limit_numbers(5)
if one_job.juge_all_fail():
print 'url: %s -->挂了' % url
return False
# 工程不为全tag(changeid /changeid+tag)
# #4. 是否把tag的build全部删除。(?)
one_job.del_tag_build()
# 取出前10个,如果全部失败
one_job.get_limit_numbers(10)
print one_job.buildsInstance.keys()
## 如果总数<10,直接返回job挂了【不需要,因为如果<10,直接被全部失败返回了】
# 判断是否是相同changedid,如果不是相同changeid,则job挂了,
# 如果总数>10:后面肯定有成功的。
# 判断是否所有20个build是否是相同changeid,如果是不同的changeid,则直接返回job 挂了。
def get_need_check_list():
# 获取需要监控的manifest分支的yaml文件
manifest_branch_dict = open(r'.....manifest.yaml')
branch_info_dict = yaml.load(manifest_branch_dict)
manifest_branch_list = list(branch_info_dict.values())[0]
# BRANCH2JENKINSJOB.yaml
branch_to_jenkins_job_dict = open(r'...')
job_info_dict = yaml.load(branch_to_jenkins_job_dict)
url_list = []
master_list = []
job_list = []
# 循环jenkins Job中的manifest
for branch in job_info_dict.keys():
# 如果jenkins Job中的manifest分支在配置文件的manifest中,则进入,变向筛选了,配置文件中写的manifest分支的有效性
if branch in manifest_branch_list:
# 根据manifest分支获取形态名列表。
component_info_list = job_info_dict[branch].keys()
for component in component_info_list:
# 根据配置文件,跳过陪跑工程。
if not is_job_online(branch,component):
continue
info = job_info_dict[branch][component]
master = info[0][:-1] if info[0].endswith('/') else info[0]
url = ''.join([master,'/job/',info[1]])
url_list.append(url)
url_list = list(set(url_list))
return url_list
if __name__ == '__main__':
#### 下面就是根据 配置文件和Jenkins2Job.yaml文件,获取需要检查的job的url的列表
# url_list = get_need_check_list()
#
# # 继续筛选需要检查url的列表
# total_list = sift_url(url_list)
#
# for url in total_list:
# check_every_job(url)
# check_every_job('http://10.0.0.70:8080/jenkins/job/all_changed_failed')
check_every_job('http://10.0.0.70:8080/jenkins/job/test02/')
2021-10-07-check_job_failed
最新推荐文章于 2024-07-17 09:21:42 发布