通过接收到1个指令后自动触发CI构建,虽然也可以通过shell命令做这一步,但因为目前所有构建自动化的的动作都通过jenkins完成,所以想要尝试能不能用python去控制jenkins构建job。还真有!万能的python。想起来一句话,有趣的事,python永远不会缺席!
通过jenkins-python实现在后台操作jenkins构建job,只需要5步,并且前面4步都是简单的配置,用python代码实现操作也只有不到20行代码,很简单
命令行安装
sudo pip install python-jenkins
接下来通过python脚本尝试构建一个jenkins项目
代码示例:
通过这个小示例,感觉用python-jenkins还是可以非常方便在的在后台操作jenkins的。
#导入jenkins库
import jenkins
#定义远程的jenkins master server 的url,以及port
jenkins_server_url = 'http://10.1.71.51:8080/jenkins'
#定义用户的Userid 和 api token,token就是在上边中生成的
user_id = 'admin'
api_token = '11a7a8151dbde5173fa19b346ad46b5efe'
#实例化jenkins对象,连接远程的jenkins master server
server = jenkins.Jenkins(jenkins_server_url,username=user_id,password=api_token)
#打印一下server查是否连接成功
# print(server) #返回一个jenkins对象
# 构建job名为testJob的job(不带构建参数)
# server.build_job('testJob')
#查看某个job的构建信息
job_info=server.get_job_info('testJob')
# print(job_info)
#获取job名为testJob的job的最后次构建号
lastbuildNumber=server.get_job_info('testJob')['lastBuild']['number']
#获取job名为testJob的job的最后1次构建的执行结果状态
result =server.get_build_info('testJob',lastbuildNumber)['result']
#判断testJob是否还在构建中
status = server.get_build_info('testJob',lastbuildNumber)['building']
print(status)
我们可以打印job_info可以一下会看到什么信息:
可以很明显看出来,get_job_info(‘job_name’)返回的是整个job的构建信息
job_info=server.get_job_info('testJob')
输出转成json格式如下:
{
'_class': 'hudson.model.FreeStyleProject',
'actions': [
{
},
{
},
{
},
{
'_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'
}
],
'description': '',
'displayName': 'testJob',
'displayNameOrNull': None,
'fullDisplayName': 'testJob',
'fullName': 'testJob',
'name': 'testJob',
'url': 'http: //10.1.71.51/jenkins/job/testJob/',
'buildable': True,
'builds': [
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 24,
'url': 'http: //10.1.71.51/jenkins/job/testJob/24/'
},
{
'_class': 'hudson.model.FreeStyleBuild',
'number': 23,
'url': 'http: //10.1.71.51/jenkins/job/testJob/23/'
}
],
'color': 'blue',
'firstBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 1,
'url': 'http: //10.1.71.51/jenkins/job/testJob/1/'
},
'healthReport': [
{
'description': 'Buildstability: Norecentbuildsfailed.',
'iconClassName': 'icon-health-80plus',
'iconUrl': 'health-80plus.png',
'score': 100
}
],
'inQueue': True,
'keepDependencies': False,
'lastBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastCompletedBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastFailedBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 7,
'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
},
'lastStableBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastFailedBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 7,
'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
},
'lastStableBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastSuccessfulBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 25,
'url': 'http: //10.1.71.51/jenkins/job/testJob/25/'
},
'lastUnstableBuild': None,
'lastUnsuccessfulBuild': {
'_class': 'hudson.model.FreeStyleBuild',
'number': 7,
'url': 'http: //10.1.71.51/jenkins/job/testJob/7/'
},
'nextBuildNumber': 26,
'property': [
],
'queueItem': {
'_class': 'hudson.model.Queue$WaitingItem',
'blocked': False,
'buildable': False,
'id': 55,
'inQueueSince': 1567674112446,
'params': '',
'stuck': False,
'task': {
'_class': 'hudson.model.FreeStyleProject',
'name': 'testJob',
'url': 'http: //10.1.71.51/jenkins/job/testJob/'
},
'url': 'queue/item/55/',
'why': 'Inthequietperiod.Expiresin4.9秒',
'timestamp': 1567674117446
},
'concurrentBuild': False,
'downstreamProjects': [
],
'labelExpression': None,
'scm': {
'_class': 'hudson.scm.NullSCM'
},
'upstreamProjects': [
]
}
参考文档:
Python-Jenkins API使用 —— 在后端代码中操控Jenkins