当前位置: 首页 > article >正文

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等功能。。

 
有相关需求的同学可自行参考官网。

 

http://www.kler.cn/a/512375.html

相关文章:

  • SuperdEye:一款基于纯Go实现的间接系统调用执行工具
  • 和优秀的人一起共事,你会越来越优秀!
  • Python数据分析案例70——基于神经网络的时间序列预测(滞后性的效果,预测中存在的问题)
  • Vue3 nginx 打包后遇到的问题
  • Zookeeper(16)Zookeeper的状态模型是什么?
  • 动手学大数据-3社区开源实践
  • 使用AI生成金融时间序列数据:解决股市场的数据稀缺问题并提升信噪比
  • Java 日志技术、Logback日志框架、日志级别
  • 使用vue-next-admin框架后台修改动态路由
  • easy_Maze
  • 数据库的DQL(3)
  • 【18】Word:明华中学-儿童医保❗
  • CSS中相对定位和绝对定位详解
  • Pytorch使用教程(12)-如何进行并行训练?
  • Golang Gin系列-6:Gin 高级路由及URL参数
  • TIM定时中断
  • vue动态修改网页icon图标【浏览器】
  • ARCGIS国土超级工具集1.3更新说明
  • (7)(7.2) 围栏
  • 第四届机器学习、云计算与智能挖掘国际会议
  • C++:bfs解决多源最短路与拓扑排序问题习题
  • games101笔记-02线性代数回顾
  • 第01章 07 MySQL+VTK C++示例代码,实现医学影像数据的IO数据库存储
  • 构建基于Hadoop的数据湖解决方案
  • 通过以太网加载linux内核、设备树、根文件系统方法(以stm32MP135为例)
  • 插入排序 计数排序 堆排序 快速排序 归并排序