zoukankan      html  css  js  c++  java
  • 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("
    任务第%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
  • 相关阅读:
    牛客网剑指offer第46题——孩子们的游戏(圆圈中最后剩下的数)
    不借助临时变量两数交换篇
    牛客网剑指offer第48题——不用加减乘除做加法
    牛客网剑指offer第44题——翻转单词顺序列
    双指针索引技术
    二叉树的下一个结点
    数组中的逆序对
    丑数
    野指针与空指针
    【转】以操作系统的角度述说线程与进程
  • 原文地址:https://www.cnblogs.com/juan-F/p/14917897.html
Copyright © 2011-2022 走看看