jenkins-api操作
一. 简述:
在一个比较复杂的环境中, 往往会有自己开发的运维管理平台。在代码发布这块,尽管jenkins有一个比较方便的UI, 但很多团队还是喜欢集中式管理, 将发布功能(仅仅把jenkins作为一个发布组件使用)嵌入运维管理平台。当然,对于这种需求, 强大的jenkins也为我们提供的相应的接口支持。
jenkins目前支持xml、json、python三种(当然其他的语言,也可以自己封装相关接口)对象远程请求访问,可以通过http://jenkdinsurl/api/来查看当前版本中支持的jenkins操作。
二. 关于jenkins api:
关于python的api, 目前有两个:JenkinsAPI 和Python-Jenkins 这里就以python-Jenkins(以实现功能为优先,未做特殊调研两者的差异性,有时间可以看下)作为说明。
安装python model: pip install python-jenkins
关于认证, 目前jenkins 支持用户名密码的方式, 同样在密码段也可以通过apitoken的方式进行认证, 代码片段如下:
url = 'http://jenkins.xxx-inc.com:8082'
user_id = 'xiaoxiang'
apitoken = '495b92effe9fb696ed14a7d5619efaf6' #可通过jenkins web用户管理/设置页面查看
#apitoken = 'xxxxxx'
server = jenkins.Jenkins(url, username=user_id, password=apitoken)
user = server.get_whoami() #获取用户信息
nodes = server.get_nodes() #获取node信息
print nodes
JOB功能说明:
a). job创建 create_job():
这个功能比较无奈,只能先写好的xml 作为内容进行创建,不过也可以理解, 内部各种部署方式、插件,不太容易做成通用性强的参数化接口。片段如下:
template = '''<?xml version='1.0' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.15">
<actions>
...............
</flow-definition>
'''
server = jenkins.Jenkins(url, username=user_id, password=apitoken)
server.create_job('pipeline-test4',template) #创建一个名为pipeline-test4的job
b). build job: build_job():
server.build_job('pipeline-test4') #无参数构建
server.build_job('pipeline-test4',{'Tag':'v201712211559'}) #参数构建(需要在config中配置参数化构建, 这个选择了gitlab的T)
server.get_job_info('pipeline-test4')['lastBuild'] #获取最后一次构建信息
#获取最后一次构建状态
last_build_number = server.get_job_info('pipeline-test4')['lastCompletedBuild']['number']
server.get_build_info('pipeline-test4', last_build_number)['result']
server.get_build_info('pipeline-test4', last_build_number)['building'] #查看是否还在构建中
构建过程中,可通过直接访问相关url进行查看build日志:
http://jenkinsurl/job/{jobname}/lastBuild/consoleText
注: 在实际工作中,可能没法再build_job后立刻获取最后构建数(lastbuildnumber,或者说, 获取的构建数为上次的构建数,保险起见,应该在build前,获取构建数(lastbuildnum),在build后,通过lastbuildnum+1,或者可以直接获取nextBuildNumber(server.get_job_info('pipeline-test4')['nextBuildNumber'])数值来判断构建是否完成!)
c). 其他job操作:
#server.get_jobs() 获取所有job
#server.get_job_name('pipeline-test4') 判断job是否存在
#server.get_job_info_regex('test') 正则方式获取匹配到的job信息
#server.get_queue_info 获取job build队列长度(等待构建数)
#server.copy_job('pipeline-test4','pipeline-test5') copy job
#server.rename_job('pipeline-test5','pipeline-test6') 重命名
#server.delete_job('pipeline-test6') 删除
#server.disable_job('pipeline-test4') 禁止掉构建功能
#server.enable_job('pipeline-test4') 启用禁止的job构建功能
#server.get_job_config('pipeline-test4') 获取job配置信息
#server.reconfig_job('pipeline-test4', config_xml) #重置job配置信息
#server.build_job_url('pipeline-test4') 获取job构建url
#server.get_build_console_output('pipeline-test4',13) 获取13次build的output log
#server.get_running_builds() 获取正在运行的build
#server.stop_build('pipeline-test4',13) 停止正在运行的build
d). Node功能说明:
创建node:
params = {'port': '22',
'username': 'root',
'credentialsId': 'c49df9e7-e4b3-487f-82e2-019978774c73',
'host':ipaddress
}
server.create_node(name = node_name,numExecutors = int(3),nodeDescription = '负责人:xx',remoteFS = '/home/jenkins',labels = 'vipkid_test',exclusive = True,launcher = jenkins.LAUNCHER_SSH,launcher_params = params)
#(可动态化抽取,项目绑定,初始化定制)
其他node操作:
#server.get_node_config(name) #node信息获取
#server.reconfig_node(name, config_xml) # 更新node配置
#server,disable_node(name, msg='') #禁止node功能
#server.enable_node(name) 开启禁止的node功能
#server.delete_node(name) 删除
#server.node_exists(name) 判断node是否存在
#server.assert_node_exists(name) 类似node_exists,node不存在时,引发异常
e). 其他功能:
如: 视图(view) ,promotions等功能。。
原文地址:https://blog.csdn.net/gujimoxiao/article/details/145269298
免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!