python 獲取Jenkins上的job的狀態


最近在做一個項目的CI雙流水線建設,因為一個流水線涉及到多個job,那上一個流水線沒有全部結束的話,這邊項目要求是不能開始下一個CI流程的,那么,此時就需要判斷上一個流程里的所有job是否結束,需要獲取job的狀態,因此寫了下面的代碼,僅供參考。

復制或者轉發請附上我的鏈接。

 

 1 import jenkins
 2 import time
 3 import sys
 4 
 5 
 6 def login_jenkins(username="賬戶", password="密碼"):
 7     server = jenkins.Jenkins("Jenkins服務URL", username=username, password=password)
 8     print(server)
 9     return server
10 
11 
12 def get_jobs_status(job_name, server):
13     try:
14         server.assert_job_exists(job_name)
15     except Exception as e:
16         print(e)
17         job_statue = '1'
18 
19     # 判斷job是否處於排隊狀態
20     inQueue = server.get_job_info(job_name)['inQueue']
21     print("任務是否處於排隊狀態:", inQueue)
22     if str(inQueue) == 'True':  # 排隊
23         job_statue = 'pending'
24         running_number = server.get_job_info(job_name)['nextBuildNumber']
25     else:
26         # 沒有在排隊的job,獲取最新一個的執行編號
27         running_number = server.get_job_info(job_name)['nextBuildNumber'] - 1
28 
29         try:
30             running_status = server.get_build_info(job_name, running_number)['building'] # 判斷job是否在執行中 31             if str(running_status) == 'True':
32                 job_statue = 'running'
33             else:
34                 # 若running_status不是True說明job執行完成
35                 job_statue = server.get_build_info(job_name,running_number)['result']
36         except Exception as e:
37             # 上面假設job處於running狀態的假設不成立,則job的最新number應該是['lastCompletedBuild']['number']
38             lastCompletedBuild_number = server.get_job_info(job_name)['lastCompletedBuild']['number']
39             job_statue = server.get_build_info(job_name, lastCompletedBuild_number)['result']
40 
41     return job_statue, running_number
42 
43 
44 if __name__ == "__main__":
45     server = login_jenkins(username="賬戶", password="密碼")
46     job_name_list = ["job1", "job2", "job3", "job4"..........]  # 監控的任務名列表
47     if len(sys.argv) > 1: # 可接受傳參,多個請以逗號分隔 48         job_name_list = list(sys.argv[1].split(","))
49         print(job_name_list)
50     for job_name in job_name_list:
51         num = 0
52         while True:
53             print("\n任務第%d次輪詢!"%int(num+1))
54             job_statue, running_number = get_jobs_status(job_name, server)
55             print("任務執行狀態:", job_statue)
56             print("任務執行編號:", running_number)
57             if job_statue in ("pending", "running"):
58                 # time.sleep(3*60)  # 如果自動化腳本還在執行,新版本的環境部署job需要等待
59                 time.sleep(60)
60                 num += 1
61                 if num == 20: # 控制輪詢等待的次數,不能一直等待(看個人場景需求) 62                     break
63             else:
64                 break

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM