最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年05月12日 09:10:12   作者:Sudley  
這篇文章主要介紹了Python-jenkins模塊獲取jobs的執(zhí)行狀態(tài)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

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)的方案。

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)計這兩個視圖的運行情況

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

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

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

job執(zhí)行演示:

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

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

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

get_job_data.py源碼如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author: Sudley
# ctime: 2020/02/12

import sys
import jenkins
import time
from 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)建記錄都沒有則補(bǔ)0
        print('There is not build number in',job_name)
        average_success_duration = success_count = all_count = success_rate = 0
        line = 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 + 1
        continue
      #獲取最后一次完成構(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 * 3600
        end_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'] / 1000
        job_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 + 1

def 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)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python字典中items()函數(shù)案例詳解

    Python字典中items()函數(shù)案例詳解

    這篇文章主要介紹了Python字典中items()函數(shù)案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • Python實現(xiàn)的KMeans聚類算法實例分析

    Python實現(xiàn)的KMeans聚類算法實例分析

    這篇文章主要介紹了Python實現(xiàn)的KMeans聚類算法,結(jié)合實例形式較為詳細(xì)的分析了KMeans聚類算法概念、原理、定義及使用相關(guān)操作技巧,需要的朋友可以參考下
    2018-12-12
  • python使用openCV遍歷文件夾里所有視頻文件并保存成圖片

    python使用openCV遍歷文件夾里所有視頻文件并保存成圖片

    這篇文章主要介紹了python使用openCV遍歷文件夾里所有視頻文件并保存成圖片,本文通過實例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-01-01
  • Python中OTSU算法的原理與實現(xiàn)詳解

    Python中OTSU算法的原理與實現(xiàn)詳解

    OTSU算法是大津展之提出的閾值分割方法,又叫最大類間方差法,本文主要為大家詳細(xì)介紹了OTSU算法的原理與Python實現(xiàn),感興趣的小伙伴可以了解下
    2023-12-12
  • python庫umap有效地揭示高維數(shù)據(jù)的結(jié)構(gòu)和模式初探

    python庫umap有效地揭示高維數(shù)據(jù)的結(jié)構(gòu)和模式初探

    這篇文章主要介紹了python庫umap有效地揭示高維數(shù)據(jù)的結(jié)構(gòu)和模式初探,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • requests和lxml實現(xiàn)爬蟲的方法

    requests和lxml實現(xiàn)爬蟲的方法

    下面小編就為大家?guī)硪黄猺equests和lxml實現(xiàn)爬蟲的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • pygame學(xué)習(xí)筆記(4):聲音控制

    pygame學(xué)習(xí)筆記(4):聲音控制

    這篇文章主要介紹了pygame學(xué)習(xí)筆記(4):聲音控制,本文講解了pygame.mixer啟動與初始化、播放聲音片段wav文件、播放mp3、wma、ogg音樂文件、控制音量、制作mp3播放器中遇到的問題等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Python操作HDF5文件示例

    Python操作HDF5文件示例

    這篇文章主要為大家介紹了Python操作HDF5文件示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Python?模擬死鎖的常見實例詳解

    Python?模擬死鎖的常見實例詳解

    這篇文章主要為大家介紹了Python?模擬死鎖的常見實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Python正則抓取網(wǎng)易新聞的方法示例

    Python正則抓取網(wǎng)易新聞的方法示例

    這篇文章主要介紹了Python正則抓取網(wǎng)易新聞的方法,結(jié)合實例形式較為詳細(xì)的分析了Python使用正則進(jìn)行網(wǎng)易新聞抓取操作的相關(guān)實現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2017-04-04

最新評論

加查县| 玛曲县| 上林县| 武城县| 石景山区| 招远市| 平潭县| 黔南| 高雄县| 松原市| 临猗县| 盐山县| 息烽县| 松原市| 青浦区| 孙吴县| 英吉沙县| 平安县| 凤庆县| 普定县| 安平县| 建昌县| 金乡县| 宜良县| 读书| 东乌珠穆沁旗| 双桥区| 岚皋县| 内黄县| 绥棱县| 类乌齐县| 永城市| 高邮市| 沧州市| 贵定县| 威宁| 虎林市| 蕉岭县| 保德县| 阿尔山市| 新乐市|