通过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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM