zoukankan      html  css  js  c++  java
  • 【CI学习】Jenkins批量停止队列和正在运行的任务

     1 #!/usr/bin/env python
     2 # -*- coding: utf-8 -*-
     3 from fuer.common.jenkins_base import Cmd
     4 import json
     5 import optparse
     6 import pymongo
     7 import sys
     8 import time
     9 
    10 
    11 if __name__ == '__main__':
    12     # 用于批量关闭job的脚本
    13     usage = """python fast_close_jenkins_jobs.py -e [0 or 1 or 2 or 3 or 4 or 5 or 6] -s [all or linux or windows]"""
    14     parser = optparse.OptionParser(usage)
    15     env_help = "The envs to close jenkins job, e.g. 1 ==> 10.186.1.x"
    16     parser.add_option('-e', '--env', help=env_help, type='str')
    17 
    18     env_help = "The system to close jenkins job combine with env param"
    19     parser.add_option('-s', '--system', help=env_help, type='str')
    20 
    21     options, args = parser.parse_args()
    22 
    23     env_param = options.env
    24     if env_param is None:
    25         print('param env is null, finish script')
    26         sys.exit(0)
    27 
    28     system_param = options.system
    29     if system_param is None:
    30         print('system is null, finish script')
    31         sys.exit(0)
    32 
    33     system_filter_param = ''
    34     if system_param.lower() == 'linux':
    35         system_filter_param = 'Linux'
    36     elif system_param.lower() == 'windows':
    37         system_filter_param = 'Windows'
    38     else:
    39         pass
    40     env_filter_param = '10.186.' + env_param + '.'
    41 
    42     # # debug
    43     # system_filter_param = ''
    44     # env_filter_param = '10.186.' + '2' + '.'
    45 
    46 
    47     jenkins_instance = Cmd()
    48     mongodb_instance = pymongo.MongoClient(host='192.186.0.5', port=27017)['edrFuerNew']
    49 
    50     need_close_jenkins = []
    51 
    52     filter_param = {}
    53     if env_filter_param:
    54         filter_param['ip'] = {'$regex': env_filter_param}
    55     if system_filter_param:
    56         filter_param['os_type'] = system_filter_param
    57     for item in mongodb_instance['agent_info'].find(filter=filter_param):
    58         need_close_jenkins.append(item['jenkins_job'])
    59 
    60     all_wait_queue = jenkins_instance.server.get_queue_info()
    61     # 关闭在队列但是未构建的job
    62     for queue_item in all_wait_queue:
    63         if queue_item['task']['name'] in need_close_jenkins:
    64             jenkins_instance.server.cancel_queue(queue_item['id'])
    65 
    66     # 关闭正在构建中的job
    67     all_running_queue = jenkins_instance.server.get_running_builds()
    68     for queue_item in all_running_queue:
    69         if queue_item['name'] in need_close_jenkins:
    70             for i in range(3):
    71                 jenkins_instance.server.stop_build(name=queue_item['name'], number=queue_item['number'])
    72                 time.sleep(2)
    73 
    74     print 'run success'

    document:agent_info 字段jenkins_job是jenkins上的job name

      1 #!/usr/bin/env python
      2 # encoding: utf-8
      3 import re, jenkins
      4 from time import sleep
      5 from fuer.conf import conf
      6 from fuer.common.logger import LOG_DEBUG, LOG_ERROR
      7 from jenkins import NotFoundException
      8 
      9 
     10 class Cmd(object):
     11     """jenkins cmd 接口
     12     主要提供一下API
     13         update_mgr
     14         _build_job  # TODO 移除保护方法
     15         is_job_finish
     16     """
     17 
     18     def __init__(self):
     19         self.url = conf.JENKINS["server_url"]
     20         self.uid = conf.JENKINS["user_id"]
     21         self.token = conf.JENKINS["token"]
     22         self.server = None
     23         self.create_server()
     24 
     25     def create_server(self):
     26         """
     27         创建连接jenkins
     28         :return:bool
     29         """
     30         self.server = jenkins.Jenkins(self.url, username=self.uid, password=self.token)
     31 
     32     def update_mgr(self, job_name, mgr_id, ver):
     33         """
     34         :param job_name:mgr对应的jenkins job
     35         :param mgr_id:mgr id
     36         :param ver: 此次升级的版本信息
     37         :return:
     38         """
     39         LOG_DEBUG('Job:{},update_mgr {0} {1}'.format(job_name, mgr_id, ver))
     40         self._build_job(job_name, mgr_id=mgr_id, ver=ver, wait=0)
     41 
     42     def update_agent(self, uid, cfg, tests_ver):
     43         """
     44         :param uid:对应的jenkins job id
     45         :param cfg:升级对应的配置
     46         :param tests_ver:用例标签
     47         :return:返回本次执行id
     48         """
     49         LOG_DEBUG('执行update_agent {0} {1} {2}'.format(uid, cfg, tests_ver))
     50         last_number = self.get_last_build_number(uid)
     51         self._build_job(uid, cfg=cfg, tests_ver=tests_ver)
     52         return int(last_number) + 1
     53 
     54     def _build_job(self, name, **kwargs):
     55         """
     56         :param name: 对应的jenkins job name
     57         :param kwargs:  对应配置信息
     58         :return:
     59         """
     60         if not kwargs:
     61             self.server.build_job(name)
     62         else:
     63             # String参数化构建job名为job_name的job, 参数param_dict为字典形式,如:param_dict= {"param1":“value1”, “param2”:“value2”}
     64             self.server.build_job(name, parameters=kwargs)
     65 
     66     def is_job_finish(self, name, build_number=None, retry_times=10):
     67         """
     68         判断job名为job_name的job的某次构建是否还在构建中
     69         :param name: 对应的jenkins job name
     70         :param build_number:默认:lastBuild
     71         :param retry_times:
     72         :return:
     73         """
     74         if not build_number:
     75             try:
     76                 build_number = self.server.get_job_info(name)['lastBuild']['number']
     77             except Exception, e:  # TODO 由于节点未连接导致的
     78                 return False
     79         for retry in xrange(retry_times):
     80             try:
     81                 ret = self.server.get_build_info(name, build_number)['building']
     82             except Exception, e:
     83                 ret = True
     84                 sleep(retry)
     85             else:
     86                 return not ret
     87         return not ret
     88 
     89     def get_build_job_info(self, name, build_number=None):
     90         """
     91         获取job构建信息
     92         :param name: 对应的jenkins job name
     93         :param build_number:默认:lastBuild
     94         :return:
     95         """
     96         if not build_number:
     97             build_number = self.server.get_job_info(name)['lastBuild']['number']
     98         build_info = None
     99         try:
    100             build_info = self.server.get_build_info(name, build_number)['result']
    101 
    102         except Exception as e:
    103             LOG_ERROR("获取job构建信息出错 %s" % e)
    104 
    105         return build_info
    106 
    107     def get_job_result(self, name, build_number=None):
    108         """
    109         返回job执行结果
    110         :param name: 对应的jenkins job name
    111         :param build_number:默认:lastBuild
    112         :return:
    113         """
    114         if not build_number:
    115             build_number = self.server.get_job_info(name)['lastBuild']['number']
    116 
    117         build_result = None
    118         try:
    119             build_result = self.server.get_build_info(name, build_number)['result']
    120 
    121         except Exception as e:
    122             LOG_ERROR("获取job执行结果出错 %s" %e )
    123 
    124         return build_result
    125 
    126     def get_job_console(self, name, build_number=None, regular=None, group_id=1):
    127         """
    128         返回job执行日志信息
    129         :param name: 对应的jenkins job name
    130         :param build_number:默认:lastBuild
    131         :param regular:日志结
    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    ADB常用命令
    Java内部开发框架
    Android开发的十个建议
    通过浏览器访问网站的过程
    CDN的概念和解决的问题
    nginx实现range请求
    Nginx如何重新编译添加模块
    MP4文件在线播放首屏慢的问题
    Ubuntu下添加程序到应用程序
    一致性hash
  • 原文地址:https://www.cnblogs.com/gtea/p/12618843.html
Copyright © 2011-2022 走看看