通过jenkins-Python在后台操作Jenkins构建job

  最近要开发1个接口,接收到1个指令后自动触发自动化测试,虽然也可以通过shell命令做这一步,但因为目前所有构建自动化的的动作都通过jenkins完成,所以想要尝试能不能用python去控制jenkins构建job。还真有!万能的python。想起来一句话,有趣的事,python永远不会缺席!

 

  通过jenkins-python实现在后台操作jenkins构建job,只需要5步,并且前面4步都是简单的配置,用python代码实现操作也只有不到20行代码,很简单

  step1:在jenkins中创建1个测试job

  step2:查看Jenkins的User Id,并记录下来,等下配置python脚本时需要用到

 

  step3:jenkins生成api-token,记录token至1个文档中,后面要用到 

 

 

点击【保存】

 

  step4:安装python-jenkins库

  命令行安装

1 sudo pip install python-jenkins

  pythonCharm安装:

  当前使用的python-jenkins版本是1.5.0 

   接下来通过python脚本尝试构建一个jenkins项目

  代码示例:

   通过这个小示例,感觉用python-jenkins还是可以非常方便在的在后台操作jenkins的。

  

 1 #导入依赖
 2 import jenkins
 3 
 4 #定义远程的jenkins master server 的url,以及port
 5 jenkins_server_url = 'http://10.1.71.51:8080/jenkins'
 6 
 7 #定义用户的Userid 和 api token
 8 user_id = 'admin'
 9 api_token = '11a7a8151dbde5173fa19b346ad46b5efe'
10 
11 #实例化jenkins对象,连接远程的jenkins master server
12 server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token)
13 #打印一下server查是否连接成功
14 # print(server) #返回一个jenkins对象<jenkins.Jenkins object at 0x10807d190>
15 
16 # 构建job名为testJob的job(不带构建参数)
17 # server.build_job('testJob')
18 
19 #查看某个job的构建信息
20 job_info=server.get_job_info('testJob')
21 # print(job_info)
22 
23 #获取job名为testJob的job的最后次构建号
24 lastbuildNumber=server.get_job_info('testJob')['lastBuild']['number']
25 
26 #获取job名为testJob的job的最后1次构建的执行结果状态
27 result =server.get_build_info('testJob',lastbuildNumber)['result']
28 
29 #判断testJob是否还在构建中
30 status = server.get_build_info('testJob',lastbuildNumber)['building']
31 print(status)

 

 

 

  我们可以打印job_info可以一下会看到什么信息:

  可以很明显看出来,get_job_info('job_name')返回的是整个job的构建信息

job_info=server.get_job_info('testJob')

 

  1 {
  2     '_class': 'hudson.model.FreeStyleProject',
  3     'actions': [
  4         {
  5             
  6         },
  7         {
  8             
  9         },
 10         {
 11             
 12         },
 13         {
 14             '_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'
 15         }
 16     ],
 17     'description': '',
 18     'displayName': 'testJob',
 19     'displayNameOrNull': None,
 20     'fullDisplayName': 'testJob',
 21     'fullName': 'testJob',
 22     'name': 'testJob',
 23     'url': 'http: //10.1.71.51/jenkins/job/testJob/',
 24     'buildable': True,
 25     'builds': [
 26         {
 27             '_class': 'hudson.model.FreeStyleBuild',
 28             'number': 25,
 29             'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
 30         },
 31         {
 32             '_class': 'hudson.model.FreeStyleBuild',
 33             'number': 24,
 34             'url': 'http: //10.1.71.51/jenkins/job/testJob/24/'
 35         },
 36         {
 37             '_class': 'hudson.model.FreeStyleBuild',
 38             'number': 23,
 39             'url': 'http: //10.1.71.51/jenkins/job/testJob/23/'
 40         }
 41     ],
 42     'color': 'blue',
 43     'firstBuild': {
 44         '_class': 'hudson.model.FreeStyleBuild',
 45         'number': 1,
 46         'url': 'http: //10.1.71.51/jenkins/job/testJob/1/'
 47     },
 48     'healthReport': [
 49         {
 50             'description': 'Buildstability: Norecentbuildsfailed.',
 51             'iconClassName': 'icon-health-80plus',
 52             'iconUrl': 'health-80plus.png',
 53             'score': 100
 54         }
 55     ],
 56     'inQueue': True,
 57     'keepDependencies': False,
 58     'lastBuild': {
 59         '_class': 'hudson.model.FreeStyleBuild',
 60         'number': 25,
 61         'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
 62     },
 63     'lastCompletedBuild': {
 64         '_class': 'hudson.model.FreeStyleBuild',
 65         'number': 25,
 66         'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
 67     },
 68     'lastFailedBuild': {
 69         '_class': 'hudson.model.FreeStyleBuild',
 70         'number': 7,
 71         'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
 72     },
 73     'lastStableBuild': {
 74         '_class': 'hudson.model.FreeStyleBuild',
 75         'number': 25,
 76         'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
 77     },
 78     'lastSuccessfulBuild': {
 79         '_class': 'hudson.model.FreeStyleBuild',
 80         'number': 25,
 81         'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
 82     },
 83     'lastUnstableBuild': None,
 84     'lastUnsuccessfulBuild': {
 85         '_class': 'hudson.model.FreeStyleBuild',
 86         'number': 7,
 87         'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
 88     },
 89     'nextBuildNumber': 26,
 90     'property': [
 91         
 92     ],
 93     'queueItem': {
 94         '_class': 'hudson.model.Queue$WaitingItem',
 95         'blocked': False,
 96         'buildable': False,
 97         'id': 55,
 98         'inQueueSince': 1567674112446,
 99         'params': '',
100         'stuck': False,
101         'task': {
102             '_class': 'hudson.model.FreeStyleProject',
103             'name': 'testJob',
104             'url': 'http: //10.1.71.51/jenkins/job/testJob/'
105         },
106         'url': 'queue/item/55/',
107         'why': 'Inthequietperiod.Expiresin4.9秒',
108         'timestamp': 1567674117446
109     },
110     'concurrentBuild': False,
111     'downstreamProjects': [
112         
113     ],
114     'labelExpression': None,
115     'scm': {
116         '_class': 'hudson.scm.NullSCM'
117     },
118     'upstreamProjects': [
119         
120     ]
121 }

 

 参考文档:

Python-Jenkins API使用 —— 在后端代码中操控Jenkins

 

posted @ 2019-09-05 17:12  wangju003  阅读(3425)  评论(0编辑  收藏  举报