zoukankan      html  css  js  c++  java
  • Python Jenkins API

    Python Jenkins API

    作者:运维人在路上

    个人博客https://www.cnblogs.com/hujinzhong

    微信公众号:运维人在路上

    Bilibili账号https://space.bilibili.com/409609392

    个人简介:本人是一枚大型电商平台的运维工程师,对开发及运维有一定了解,现分享技术干货,欢迎大家交流!

    一、python-jenkins模块

    1.1、安装

    pip install python-jenkins
    

    1.2、相关文档

    # 官方文档:
    	https://python-jenkins.readthedocs.io/en/latest/
    # 官方API:
    	https://python-jenkins.readthedocs.io/en/latest/api.html
    

    1.3、相关方法

    import jenkins
    
    server = jenkins.Jenkins('http://10.0.0.102:8888/', username="admin", password="123456")
    
    # Jenkins的job数量
    print(server.jobs_count())
    
    # Jenkins-web-ui
    print(server.server)    # http://10.0.0.102:8888/
    
    # 所有的job信息
    all_jobs_li = server.get_all_jobs()
    for item in all_jobs_li:
        print('name: %s' % item['name'], 'URL: ', item['url'])
    
    # 账户信息描述
    print(server.get_whoami())
    
    # auth
    print(server.auth)
    
    # DEBUG Job信息
    print(server.debug_job_info('web_demo_freestyle'))
    
    # ####### CURD Job #######
    # Job是否存在
    print(server.job_exists('web_demo_freestyle'))
    
    # 获取所有的Job
    print(server.get_jobs())
    
    # 创建Job
    server.create_job('API', jenkins.RECONFIG_XML)
    
    # 删除Job
    server.delete_job('API')
    
    # 复制job
    server.copy_job('web_demo_freestyle', 'web_demo_freestyle_copy')
    
    # enable job
    server.enable_job('web_demo_freestyle_copy')
    
    # 禁用Job
    server.disable_job('copy-my-github')
    
    # 重新配置Job
    server.reconfig_job('copy-my-github', jenkins.RECONFIG_XML)
    
    # 重命名Job
    server.rename_job('web_demo_freestyle_copy_2', 'web_demo_freestyle_copy')
    
    # 触发Job运行
    # 触发Job(方式一)
    server.build_job_url('web_demo_freestyle')
    
    # 触发Job(方式二)
    server.build_job('web_demo_freestyle')
    # server.build_job('web_demo_freestyle_copy', parameters=params)
    
    # 查看指定构建编号的输出
    print(server.get_build_console_output('web_demo_freestyle', 11))
    
    # 下一次构建编号,步长为5
    next_bn = server.get_job_info('ansible-playbook')['nextBuildNumber']
    server.set_next_build_number('ansible-playbook', next_bn + 5)
    
    # 指定编号的构建Job信息
    print(server.get_build_info('web_demo_freestyle', 11))
    
    # 获取正在运行的Job,一般结合build_job方法一起使用
    print(server.get_running_builds())
    
    # 终止指定编号的Job
    server.stop_build('ansible-playbook', 62)
    
    # 获取Job名称
    print(server.get_job_name('web_demo_freestyle'))
    
    # 断言Job是否存在
    print(server.assert_job_exists('web_demo_freestyle'))
    '''
    存在则返回None,不存在则抛出错误信息
    '''
    
    # 该Job所有的相关信息
    print(server.get_job_info('web_demo_freestyle'))
    print(server.get_job_info('web_demo_freestyle')['actions'])
    
    # 查看该视图下所有的Job
    print(server.get_jobs())
    print(server.get_jobs(view_name='all'))
    
    # 正则匹配获取Job信息
    print(server.get_job_info_regex('^dianchou'))
    
    # 获取最后一次构建的Job信息
    job_name = "web_demo_freestyle"
    server.build_job(job_name)
    last_build_number = server.get_job_info(job_name)['lastCompletedBuild']['number']
    build_info = server.get_build_info(job_name, last_build_number)
    print(build_info)
    
    # shutdown jenkins
    # server.quiet_down()
    

    1.4、脚本分享

    #!usrinpython3
    #  -*- coding: utf-8 -*-
    import logging
    
    import requests
    
    try:
        import jenkins
    except ImportError:
        jenkins = None
        print("未安装Jenkins模块
    pip install python-jenkins")
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    logger = logging.getLogger(__name__)
    
    
    def build_package():
        """启动依赖包构建任务"""
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            if 'package' in job_name:
                result = server.build_job(job_name)
                logger.info('build ' + job_name + ' ' + str(result))
    
    
    def build_all_job():
        """启动所有非package任务"""
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            if 'package' not in job_name:
                result = server.build_job(job_name)
                logger.info('build ' + job_name + ' ' + str(result))
    
    
    def build_all_docker():
        """启动所有非package任务"""
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            if 'auto-test_83,' not in job_name:
                continue
            if 'boss' in job_name:
                continue
            if 'package' not in job_name:
                result = server.build_job(job_name)
                logger.info('build ' + job_name + ' ' + str(result))
    
    
    def build_all_dubbo_job():
        """启动所有非package任务"""
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            if 'auto-' in job_name and 'package' not in job_name:
                try:
                    result = server.build_job(job_name)
                    logger.info('build ' + job_name + ' ' + str(result))
                except requests.exceptions.HTTPError:
                    logger.info('build ' + job_name + ' ' + 'requests.exceptions.HTTPError')
    
    
    def build_all_cloud_job():
        """启动所有非package任务"""
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            if 'auto2-' in job_name and 'package' not in job_name:
                try:
                    result = server.build_job(job_name)
                    logger.info('build ' + job_name + ' ' + str(result))
                except requests.exceptions.HTTPError:
                    logger.info('build ' + job_name + ' ' + 'requests.exceptions.HTTPError')
    
    
    def stop_all():
        jobs = server.get_all_jobs()
        for job in jobs:
            job_name = job['name']
            builds = server.get_job_info(job_name)['builds']
            for build in builds:
                try:
                    server.stop_build(job_name, build['number'])
                    print('stop', job_name, build['number'])
                except jenkins.NotFoundException:
                    pass
    
    
    if __name__ == '__main__':
        server = jenkins.Jenkins('http://10.0.0.102:8888', username="admin", password="123456")
        stop_all()
        # build_package()
        # build_all_cloud_job()
        # build_all_dubbo_job()
    
    作者:Lawrence

    -------------------------------------------

    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!

    扫描上面二维码关注我
    如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
  • 相关阅读:
    css常用字体
    多行文本显示省略号,点击展开隐藏
    某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的, 加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换, 第二位和第三位交换,请编写一个函数,传入原文,输出密文
    编写一个函数,计算任意两个数字之间所能组成的奇数个数,数字必须是个位数。 比如:计算0~3之间能组成的奇数是: 01、03、13、21、23、31
    Redis(一) 数据结构与底层存储 & 事务 & 持久化 & lua
    IO多路复用之Reactor
    IO多路复用之select poll epoll
    五种IO模型
    kafka(五) 流式处理 kafka stream
    kafka(二) 高性能技术分析
  • 原文地址:https://www.cnblogs.com/hujinzhong/p/14593293.html
Copyright © 2011-2022 走看看