Python对jenkins中pclint 模块数据采集[练手]

任务概述: 以 综合安防 PC-Lint检查项目为基准(http://项目url),按每个成功构建的版本,采集每个模块的PC-Lint检测构建耗时,写入数据库 
工作计划如下:
      一: 本机搭建 Mysql数据库,完成数据表设计 
      二: 完成按构建版本获取日志信息
      三 : 数据采集,可以写日志数据到数据表
      四 : 问题调整与收尾,实现整个功能

首先在数据库mysql中完成三个表设计

Python对jenkins中pclint 模块数据采集[练手]_第1张图片

代码如下

#!/usr/bin/python 3
# -*- coding:utf-8 -*-
import os
import sys
import jenkins
import re
import pymysql
import time
import math

def execute_mysql(sql):
	conn = pymysql.connect("IP地址","用户","密码","数据库名")
	cursor = conn.cursor()
	try:
		cursor.execute(sql)
		conn.commit()
		print("insert ok")
	except:
		conn.rollback()
	
def console_output_get(job_name,build_num):
	# 获得控制台输出文本
	console_output = server.get_build_console_output(job_name, build_num)
	print(console_output)	
	print (console_output.split('\n'))
	console_output_split = console_output.split('\n')
	
	if 'do pclint...\r' in console_output_split:
		#切片上限
		first_data_num = console_output_split.index('do pclint...\r')
		print(first_data_num)
		#切片下限
		final_data_num = console_output_split.index('close pclint data...\r')
		print(final_data_num)
	
		# 截取信息块
		need_data = console_output_split[first_data_num:final_data_num]

		del need_data[0]
		print(need_data)
		for index in range(0, len(need_data)):
			if '----' in need_data[index]:
				if 'PCLINT' not in need_data[index]:
					name_index = need_data[index]
					name_change = re.match(r'----(.*?)----.*',name_index)
					name_get = name_change.group(1)
					print(name_get)
					
					sql = "insert into project_details(name)values('%s')"%(name_get)
					execute_mysql(sql)
				else:
					print("name negation")
				if 'PCLINT' in need_data[index]:
					time_path_get = need_data[index]
					time_change = re.search(r'PCLINT----(.*?)\..*',time_path_get)
					path_change = re.search(r'"(.*?)".*',time_path_get)
					time_get = time_change.group(1)
					path_get = path_change.group(1)
					print(time_get)
					print(path_get)
					
					sql = "insert into project_details(path,time)values('%s','%s')"%(path_get,time_get)
					execute_mysql(sql)
				else:
					print("time path negation")
			else:
				print("the project is abnormal")
	else:
		print("This build is abnormal")

def build_info(job_name):
	job_info = server.get_job_info(job_name)
	print(job_info['builds'])
	
	for i in range(len(job_info['builds'])):
		build_num = job_info['builds'][i]['number']
		
		# 构建号的信息
		build_info = server.get_build_info(job_name,build_num)
		# 构建的时间
		build_time = Date(build_info['timestamp'])
		project_id = "1"
		sql = "insert into project_build(job_id,build_name,build_time)values('%s','%s','%s')"%(project_id,build_num,build_time)
		execute_mysql(sql)
		
		console_output_get(job_name,build_num)

# 时间戳转时间
def Date(timestamp):
	seconds = int(timestamp/1000)
	timeLocal = time.localtime(seconds)
	times = time.strftime("%Y-%m-%d_%H:%M",timeLocal)
	return times	

def getJobInfo():
	job_name = '确认job名'
	job_list = server.get_job_info(job_name)
	job_url = job_list['url']
	job_ip_get = re.match(r'http://(.*?)/.*',job_url)  #正则取ip,但有其调用函数没找到
	job_ip = job_ip_get.group(1)
	project_id = "1"
	build_info(job_name)

	sql = "insert into project_property(job_id,job_name,job_url,job_ip)values('%s','%s','%s','%s')"%(project_id,job_name,job_url,job_ip)
	execute_mysql(sql)
			
if __name__ == "__main__":
	server = jenkins.Jenkins("jenkins的url")
	getJobInfo()
	

	


	
	
	




 

你可能感兴趣的:(Python对jenkins中pclint 模块数据采集[练手])