国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

瀏覽:2日期:2022-07-25 18:06:05

1 獲取jobs的當(dāng)前任務(wù)狀態(tài)

server_1 = jenkins.Jenkins(’http://%s:%s@192.168.37.134:8081/’,username, password)

獲取狀態(tài)前先確認(rèn)2019文件夾下的get_node_list任務(wù)是否存在:

server_1.assert_job_exists(’2019/get_node_list’)

獲取最后一次完成(不包括執(zhí)行中的)的job任務(wù)執(zhí)行number:

server_1.get_job_info(’2019/get_node_list’)[’lastCompletedBuild’][’number’]

查看job狀態(tài)(SUCCESS/FAILURE/ABORTED):

server_1.get_build_info(’2019/get_node_list’,3)[’result’]server_1.get_build_console_output(’2019/get_node_list’,7).split(’n’)[-2].split(’:’)[-1].strip()

啟動jobs:

server_1.build_job(’2019/get_node_list’)

在job執(zhí)行結(jié)束前使用server_1.get_build_console_output(‘2019/get_node_list’,7).split(’n’)[-2].split(’:’)[-1].strip()獲取的狀態(tài)信息不符合預(yù)期。

job狀態(tài)應(yīng)該還包括running,pending狀態(tài),那么獲取job的當(dāng)前狀態(tài)正確姿勢如下:

job_name = ’2019/get_node_list’def get_jobs_status(job_name,server): try: server.assert_job_exists(job_name) except Exception as e: print(e) job_statue = ’1’ #判斷job是否處于排隊狀態(tài) inQueue = server.get_job_info(job_name)[’inQueue’] if str(inQueue) == ’True’: job_statue = ’pending’ running_number = server.get_job_info(job_name)[’nextBuildNumber’] else: #先假設(shè)job處于running狀態(tài),則running_number = nextBuildNumber -1 ,執(zhí)行中的job的nextBuildNumber已經(jīng)更新 running_number = server.get_job_info(job_name)[’nextBuildNumber’] -1 try: running_status = server.get_build_info(job_name,running_number)[’building’] if str(running_status) == ’True’:job_statue = ’running’ else:#若running_status不是True說明job執(zhí)行完成job_statue = server.get_build_info(job_name,running_number)[’result’] except Exception as e: #上面假設(shè)job處于running狀態(tài)的假設(shè)不成立,則job的最新number應(yīng)該是[’lastCompletedBuild’][’number’] lastCompletedBuild_number = server.get_job_info(job_name)[’lastCompletedBuild’][’number’] job_statue = server.get_build_info(job_name,lastCompletedBuild_number)[’result’] return job_statue,running_number

注意:

可能還存在下圖的情況,這個時候獲取的是26的狀態(tài),這時候也許你想獲取25的狀態(tài),26是不小心誤操作觸發(fā)的,這個時候任務(wù)的最新狀態(tài)也許就無法滿足預(yù)期要求,或者是支持并發(fā)構(gòu)建的job場景中就不適用了,關(guān)鍵還是需要結(jié)合應(yīng)用場景制定對應(yīng)的方案。

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

2 統(tǒng)計jobs的執(zhí)行成功率和平均執(zhí)行時間

統(tǒng)計場景說明:

設(shè)計了一個統(tǒng)計job執(zhí)行成功率的工程,主要從執(zhí)行時間以及視圖兩個維度來劃定需要統(tǒng)計的jobs及jobs對應(yīng)的運行范圍。

在這里我在job里面添加了DAYS和VIEWS兩個參數(shù):

**DAYS:**默認(rèn)統(tǒng)計最近一天的運行情況,如果執(zhí)行的時候輸入的是0則代表統(tǒng)計所有的運行情況。

**VIEWS:**對應(yīng)的是視圖名稱,“2019-1,test”代表統(tǒng)計這兩個視圖的運行情況

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

對應(yīng)的視圖如下:

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

執(zhí)行成功后以表格形式列出統(tǒng)計的數(shù)據(jù),表頭如下

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

列出了序號、視圖名稱、job名稱、job執(zhí)行成功的平均執(zhí)行時間、job執(zhí)行成功次數(shù)、總的執(zhí)行時間、job執(zhí)行成功率

job執(zhí)行演示:

執(zhí)行構(gòu)建時配置的參數(shù)如下

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

job_data任務(wù)的主要執(zhí)行內(nèi)容如下:

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

執(zhí)行成功后查看HTML_Report統(tǒng)計的數(shù)據(jù)如下:

Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作

get_job_data.py源碼如下:

#!/usr/bin/env python# -*- coding:utf-8 -*-# author: Sudley# ctime: 2020/02/12import sysimport jenkinsimport timefrom dominate.tags import *def Count_the_success_rate_of_jobs(days,views): username = ’sudley’ password = ’******’ with open(’//home/Sudley/python-jenkins/get_job_data.txt’,’w’) as f: print(’create a new file //home/Sudley/python-jenkins/get_job_data.txt’) serial_number = 0 #統(tǒng)計任務(wù)的累計序號 for view in views.split(’,’): #根據(jù)視圖名稱拼接視圖的URL,多個視圖間用’,’分隔 URL = (’http://%s:%s@192.168.37.134:8081/job/2019/view/%s/’)%(username, password, view) server = jenkins.Jenkins(URL) #依次獲取當(dāng)前view視圖中jobs的信息 for num in range(0,len(server.get_all_jobs())): job_name = server.get_all_jobs()[num][’fullname’] #獲取最后一次完成構(gòu)建的編號,用于劃定時間范圍(如果需要的話) try:lastCompletedBuild_num = server.get_job_info(job_name)[’lastCompletedBuild’][’number’] except:#假如job下面一個構(gòu)建記錄都沒有則補0print(’There is not build number in’,job_name)average_success_duration = success_count = all_count = success_rate = 0line = str(serial_number) + ’ ’ + view + ’ ’ + job_name + ’ ’ + str(int(average_success_duration)) + ’ ’ + str(success_count) + ’ ’ + str(all_count) + ’ ’ + str(success_rate) + ’%’with open(’//home/Sudley/python-jenkins/get_job_data.txt’,’a’) as f: f.write(str(line)) f.write(’n’)serial_number = serial_number + 1continue #獲取最后一次完成構(gòu)建的時間戳,單位由毫秒轉(zhuǎn)換為秒 lastCompletedBuild_timestamp = server.get_build_info(job_name,lastCompletedBuild_num)[’timestamp’] / 1000 #將時間先由秒轉(zhuǎn)化為元組在轉(zhuǎn)化為字符串并取到天數(shù) lastCompletedBuild_date = time.strftime('%Y%m%d',time.localtime(lastCompletedBuild_timestamp)) #print(lastCompletedBuild_date) #根據(jù)變量days和lastCompletedBuild_timestamp計算出days天前的日期,若days為0則沒有日期限制,統(tǒng)計之前運行的所有任務(wù) if str(days) == ’0’:end_date = ’false’ else:end_timestamp = float(lastCompletedBuild_timestamp) - float(days) * 24 * 3600end_date = time.strftime('%Y%m%d',time.localtime(end_timestamp)) #print(end_date) #獲取days天內(nèi)job的執(zhí)行情況 success_count = 0#job執(zhí)行成功的總數(shù) success_duration = 0 #執(zhí)行成功的job執(zhí)行時間之和,單位是s for number in range(0,len(server.get_job_info(job_name)[’builds’])):job_build_number = server.get_job_info(job_name)[’builds’][number][’number’]job_build_timestamp = server.get_build_info(job_name,job_build_number)[’timestamp’] / 1000job_build_date = time.strftime('%Y%m%d',time.localtime(job_build_timestamp))#如果日期和end_date相同則終止此job數(shù)據(jù)的累計if job_build_date == end_date: number = number - 1 break#累計執(zhí)行成功的次數(shù)和duration執(zhí)行時間job_build_result = server.get_build_info(job_name,job_build_number)[’result’]if str(job_build_result) == ’SUCCESS’: job_build_duration = server.get_build_info(job_name,job_build_number)[’duration’] success_duration = success_duration + job_build_duration / 1000 success_count = success_count + 1 #計算執(zhí)行成功的平均執(zhí)行時間和成功率,打印關(guān)鍵信息 all_count = number + 1 success_rate = success_count * 1.0 / all_count * 100 if success_count == 0:average_success_duration = success_duration else:average_success_duration = success_duration * 1.0 / success_count #將關(guān)心的數(shù)據(jù)按照一定的格式寫到/home/Sudley/python-jenkins/get_job_data.txt文件中 line = str(serial_number) + ’ ’ + view + ’ ’ + job_name + ’ ’ + str(int(average_success_duration)) + ’ ’ + str(success_count) + ’ ’ + str(all_count) + ’ ’ + str(round(success_rate,2)) + ’%’ with open(’//home/Sudley/python-jenkins/get_job_data.txt’,’a’) as f:f.write(str(line))f.write(’n’) serial_number = serial_number + 1def txt2xml(): h = html() with h.add(body()): h2(’job執(zhí)行效率統(tǒng)計’) caption(’summary:’) with table(border='2',cellspacing='0'): l = tr(bgcolor='#0000FF') l += th(’序號’) l += th(’view_name’) l += th(’job_name’) l += th(’average_success_duration’) l += th(’success_count’) l += th(’all_count’) l += th(’success_rate’) file=open(’/home/Sudley/python-jenkins/get_job_data.txt’) for line in file.readlines():curLine=line.strip().split(' ')l = tr()for i in range(0,len(curLine)): l += td(curLine[i]) with open(’/home/Sudley/python-jenkins/get_job_data.html’,’w’) as f: f.write(h.render())if __name__ == ’__main__’ : days = sys.argv[1] views = sys.argv[2] Count_the_success_rate_of_jobs(days,views) txt2xml()

以上這篇Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 99久久成人国产精品免费 | 欧美精品首页 | 国产成人咱精品视频免费网站 | 免费高清在线爱做视频 | 69中国xxxxxxxx18 | 国产一级内谢a级高清毛片 国产一级片毛片 | 狠狠色丁香婷婷综合久久来 | 亚洲精品不卡视频 | 亚洲在线视频免费观看 | 国产精品不卡 | 99在线热播精品免费 | 欧美一区二区三区在观看 | 久草综合视频 | 国产亚洲欧美日韩国产片 | 久久在线精品 | 亚洲国产精品免费在线观看 | 国产精品色内内在线播放 | 国产成人综合在线 | 91香蕉国产线观看免 | 2022久久免费精品国产72精品 | 亚洲国产一区二区三区最新 | 91视频久久 | 亚洲天堂男 | 欧美日韩成人在线视频 | 全免费a级毛片免费看视频免 | 丝袜黄色片 | 成 人免费va视频 | 最新亚洲人成网站在线影院 | 亚洲精品毛片久久久久久久 | 精品国产日韩亚洲一区二区 | 欧美一区视频 | 免费特黄一级欧美大片 | 久久视频国产 | 怡红院亚洲红怡院天堂麻豆 | 一本三道a无线码一区v小说 | 一级风流片a级国产 | 久久久久久久久久久观看 | 久久亚洲成a人片 | 午夜国产精品久久久久 | 精品日韩二区三区精品视频 | 欧美国产日本高清不卡 |