概述:
最近接到了个需求,要求基于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)