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

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

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

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

通过Python在后台操作Jenkins构建job_第1张图片

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

通过Python在后台操作Jenkins构建job_第2张图片

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

通过Python在后台操作Jenkins构建job_第3张图片
点击【保存】

step4:安装python-jenkins库

命令行安装

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

你可能感兴趣的:(Devops,python,jenkins)