python封装Jenkins常用api

45 篇文章 3 订阅
2 篇文章 0 订阅

概述:

        最近接到了个需求,要求基于jenkins的api开发一套项目发布上线平台,满足编译打包。构建,查看日志,获取编译结果,取消发布等功能。于是,我先调研了可能会用到的jenkins_api并把其封装成了简单易调用的类以及类方法,话不多说,直接上代码。

依赖包安装:

        因我的开发语言使用python,版本是3.9.5,需要先导入jenkins的依赖包,这里我使用的是python-jenkins 1.8.0版本

pip install python-jenkins==1.8.0

最终代码:

import jenkins
import logging
import xmltodict  ## 用来把xml格式内容转换成字典
import json

# 获得logger实例
logger = logging.getLogger('django')


class Jenkins(object):
    def __init__(self):
        self.jenkins_url = '你的jenkins地址'
        self.jenkins_username = 'jenkins认证用户'
        self.jenkins_password = 'jenkins认证用户密码'

    '''通过job_name获取构建job的tag号列表'''
    def get_jenkins_job_taglist(self,job_name):
        try:
            res = jenkins_server.get_job_info(name=job_name)
            tag_list = []
            # tag_name = res['actions'][0]['parameterDefinitions'][0]['name']
            count = 0
            for i in res['actions'][0]['parameterDefinitions'][0]['allValueItems']['values']:
                tag_list.append(i['value'])
                count += 1
                if count == 10:
                    break
            return tag_list
        except Exception as get_jenkins_job_taglist_err:
            logger.error('获取构建job的tag号列表出现异常,异常原因:{}'.format(get_jenkins_job_taglist_err))

    '''获取jenkins所有job名称'''
    def get_jenkins_all_jobs(self):
        try:
            res = jenkins_server.get_jobs()
            return res
        except Exception as get_all_jobs_err:
            logger.error('获取所有job信息出现异常,异常原因:{}'.format(get_all_jobs_err))

    '''获取jenkins所有模板组信息'''
    def get_jenkins_all_view_info(self):
        try:
            res = jenkins_server.get_views()
            return res
        except Exception as get_all_view_info_err:
            logger.error('获jenkins模板组view信息出现异常,异常原因:{}'.format(get_all_view_info_err))

    '''通过job_name获取job信息'''
    def get_jenkins_job_info(self,job_name):
        try:
            res = jenkins_server.get_job_info(name=job_name)
            return res
        except Exception as get_job_info_err:
            logger.error('获jenkins_job信息出现异常,异常原因:{}'.format(get_job_info_err))

    '''获取本次构建的构建编号'''
    def get_jenkins_job_nextbuildnumber(self,job_name):
        try:
            nextbuildnumber = get_jenkins_job_info(job_name=job_name)['nextBuildNumber']
            return nextbuildnumber
        except Exception as get_jenkins_job_nextbuildnumber_err:
            logger.error('获jenkins_job本次构建编号出现异常,异常原因:{}'.format(get_jenkins_job_nextbuildnumber_err))

    '''通过job_name获取job最近一次的构建编号'''
    def get_jenkins_job_lastbuildnumber(self,job_name):
        try:
            lastbuildnumber = jenkins_server.get_job_info(name=job_name)['lastBuild']['number']
            return lastbuildnumber
        except Exception as get_job_lastbuildnumber_err:
            logger.error('获jenkins_job最近一次构建编号出现异常,异常原因:{}'.format(get_job_lastbuildnumber_err))

    '''通过job_name与构建编号获取jenkins某次构建结果'''
    def get_jenkins_job_build_status(self,job_name, build_number):
        try:
            job_status = jenkins_server.get_build_info(name=job_name, number=build_number)['result']
            return job_status
        except Exception as get_jenkins_job_build_status_err:
            logger.error('获jenkins_job当前构建结果出现异常,异常原因:{}'.format(get_jenkins_job_build_status_err))

    '''通过job_name构建job'''
    def start_job_build(self,job_name, parameters):
        try:
            if parameters == {}:
                parameters = {}
            res = jenkins_server.build_job(name=job_name, parameters=parameters)
            return res
        except Exception as start_job_build_err:
            logger.error('执行jenkins_job构建出现异常,异常原因:{}'.format(start_job_build_err))

    '''通过job_name与构建编号停止jenkins_job的构建'''
    def stop_jenkins_job(self,job_name, build_number):
        try:
            res = jenkins_server.stop_build(name=job_name, number=build_number)
            return res
        except Exception as stop_job_build_err:
            logger.error('取消jenkins_job的构建出现异常,异常原因:{}'.format(stop_job_build_err))

    '''查看控制台的输出日志'''
    def get_jenkins_bulid_log(self,job_name, build_number):
        try:
            res = jenkins_server.get_build_console_output(name=job_name, number=build_number)
            return res
        except Exception as get_jenkins_bulid_log_err:
            logger.error('获取jenkins_job的构建日志出现异常,异常原因:{}'.format(get_jenkins_bulid_log_err))

    '''通过jenkins视图组名称获取视图组配置'''
    def get_jenkins_view_config(self,view_name):
        try:
            final_res = {}
            res = jenkins_server.get_view_config(name=view_name)
            xml_parse = xmltodict.parse(res)
            json_res = json.dumps(xml_parse, indent=1)
            if view_name == 'all' or view_name == '模板':
                pass
            else:
                jenkins_view_name = json.loads(json_res)['hudson.model.ListView']['name']
                jenkins_job_name_list = json.loads(json_res)['hudson.model.ListView']['jobNames']['string']
                final_res['view_name'] = jenkins_view_name
                final_res['jenkins_job_name_list'] = jenkins_job_name_list
                return final_res
        except Exception as get_jenkins_view_config_err:
            print(view_name)
            logger.error('获取jenkins视图组配置信息出现异常,异常原因:{}'.format(get_jenkins_view_config_err))

    '''获取jenkins所有视图组信息'''
    def get_jenkins_all_view(self):
        try:
            res = jenkins_server.get_views()
            return res
        except Exception as get_jenkins_all_view_err:
            logger.error('获取jenkins所有视图组信息出现异常,异常原因:{}'.format(get_jenkins_all_view_err))




## 调用测试
if __name__ == '__main__':
    j = Jenkins()
    res = j.get_jenkins_job_taglist(job_name='java')
    print(res)

输出结果:

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值