python-jenkins插件
python中有python-jenkins插件,用来实现python和jenkins交付。
使用如下命令,即可安装该模块
pip3 install python-jenkins
该模块的文档,可以参见: Python Jenkins — Python Jenkins 1.1.1.dev1 documentation
创建jenkins token
为了方便后续python连接jenkins,需要在jenkins中,使用某一用户,创建token
首先进入到自己的用户设置,点击右上角自己的用户名,然后从下拉菜单中,选择设置
在api-token选项中,创建一个新的token即可。
需要注意,token一旦创建之后,需要自己进行记录,后续该页面刷新之后,就看不到了
python操作jenkins
连接jenkins
python中,通过jenkins这个模块,来连接jenkins。代码如下:
server = jenkins.Jenkins(jenkins_server, username=user_id, password=api_token)
其中:
如果jenkins的网站是https的方式,那么连接过程中会有证书认证。如果jenkins的证书是自签发的,那么是可能连接失败的。
可以在连接jenkins之前,加入如下代码,不认证证书
import os
os.environ['PYTHONHTTPSVERIFY'] = '0'
连接成功后,就可以通过server这个类实例,来对jenkins进行操作了。
job操作
job的操作,主要使用以下方法
方法 | 参数 | 说明 |
---|
get_job_info | job_name | 获取指定job的信息 | build_job | job_name,parameters | 构建指定的job,并且传入参数。参数是一个字典 | get_build_info | job_name,number | 获取指定job的指定构建number的构建信息 | get_build_console_output | job_name, numer | 获取指定job的指定构建number的console打印信息 |
获取job信息
获取job的信息,使用get_job_info方法。该方法会返回一个字典,该字典中,存储了该job的相关所有信息。
信息如下所示:
{
?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowJob',
?'actions': [
? {},
? {},
? {},
? {},
? {},
? {},
? {},
? {},
? {'_class': 'org.jenkinsci.plugins.displayurlapi.actions.JobDisplayAction'},
? {},
? {},
? {'_class': 'com.cloudbees.plugins.credentials.ViewCredentialsAction'}
],
?'buildable': True,
?'builds': [
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ? ?'number': 1333,
? ? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
? },
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ? ?'number': 1332,
? ? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1332/'
? },
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ? ?'number': 1331,
? ? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1331/'
? },
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ? ?'number': 1330,
? ? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1330/'
? }
],
?'color': 'blue',
?'concurrentBuild': False,
?'description': 'test job',
?'displayName': 'test_job',
?'displayNameOrNull': None,
?'firstBuild': {
? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ?'number': 1324,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1324/'
},
?'fullDisplayName': 'test_job',
?'fullName': 'test_job',
?'healthReport': [
? {
? ? ?'description': 'Build stability: No recent builds failed.',
? ? ?'iconClassName': 'icon-health-80plus',
? ? ?'iconUrl': 'health-80plus.png',
? ? ?'score': 100
? }
],
?'inQueue': False,
?'keepDependencies': False,
?'lastBuild': {
? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ?'number': 1333,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
},
?'lastCompletedBuild': {
? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ?'number': 1333,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
},
?'lastFailedBuild': None,
?'lastStableBuild': {
? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ?'number': 1333,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
},
?'lastSuccessfulBuild': {
? ?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
? ?'number': 1333,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
},
?'lastUnstableBuild': None,
?'lastUnsuccessfulBuild': None,
?'name': 'test_job',
?'nextBuildNumber': 1334,
?'property': [
? {'_class': 'hudson.plugins.jira.JiraProjectProperty'},
? {'_class': 'hudson.security.AuthorizationMatrixProperty'},
? {'_class': 'com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty'},
? {'_class': 'org.jenkinsci.plugins.gitlablogo.GitlabLogoProperty'},
? {'_class': 'com.sonyericsson.rebuild.RebuildSettings'},
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.properties.DisableConcurrentBuildsJobProperty'
? },
? {'_class': 'jenkins.model.BuildDiscarderProperty'},
? {
? ? ?'_class': 'org.jenkinsci.plugins.workflow.job.properties.PipelineTriggersJobProperty'
? }
],
?'queueItem': None,
?'resumeBlocked': False,
?'url': 'https://jenkins.corp.xxx.com/job/test_job/'
}
-
builds:记录所有构建的信息。值是一个列表。每一个列表是一个字典,该字典有如下参数:
-
number:构建编号 -
url:该构建对应的url
-
color:构建的颜色。以字符串体现
-
blue:蓝色,表示构建成功 -
red:红色,表示构建失败
-
concurrentBuild:是否支持并发构建。False不支持,True支持 -
description:该job的描述信息 -
lastBuild:上一次构建的信息。是一个字典,该字典有如下参数:
-
lastFailedBuild:之前失败构建的信息 -
lastSuccessfulBuild:之前成功构建的信息 -
nextBuildNumber:下一次构建的编号 -
url:该job对应的url链接
构建job
构建job,使用build_job方法。其中job_name是必须参数,parameters是可选参数。
无参数的构建job
server.build_job(job_name)
带参数的构建job
param_dict = {
? ? ? ? ? ?"pkg_path": cur_dir,
? ? ? ? ? ?"backup_path": bak_path,
? ? ? ? ? ?"ftp_dir": ftp_path,
? ? ? ? ? ?"user": USER
? ? ? ? ? }
server.build_job(job_name, param_dict)
获取构建build的信息
通过 get_build_info 方法,可以获取到指定job,在指定构建编号下的构建信息
该方法会返回一个字典,该字典中,存储了该job的相关所有信息。
信息如下所示:
{
?'_class': 'org.jenkinsci.plugins.workflow.job.WorkflowRun',
?'actions': [
? {
? ? ?'_class': 'hudson.model.CauseAction',
? ? ?'causes': [
? ? ? {
? ? ? ? ?'_class': 'hudson.triggers.TimerTrigger$TimerTriggerCause',
? ? ? ? ?'shortDescription': 'Started by timer'
? ? ? }
? ? ]
? },
? {'_class': 'org.jenkinsci.plugins.workflow.libs.LibrariesAction'},
? {},
? {},
? {
? ? ?'_class': 'hudson.plugins.git.util.BuildData',
? ? ?'buildsByBranchName': {
? ? ? ?'origin/master': {
? ? ? ? ?'_class': 'hudson.plugins.git.util.Build',
? ? ? ? ?'buildNumber': 1279,
? ? ? ? ?'buildResult': None,
? ? ? ? ?'marked': {
? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ?'branch': [{'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c', 'name': 'origin/master'}]
? ? ? ? },
? ? ? ? ?'revision': {
? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ?'branch': [{'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c', 'name': 'origin/master'}]
? ? ? ? }
? ? ? },
? ? ? ?'refs/remotes/origin/master': {
? ? ? ? ?'_class': 'hudson.plugins.git.util.Build',
? ? ? ? ?'buildNumber': 1333,
? ? ? ? ?'buildResult': None,
? ? ? ? ?'marked': {
? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ?'branch': [
? ? ? ? ? ? {
? ? ? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ? ? ?'name': 'refs/remotes/origin/master'
? ? ? ? ? ? }
? ? ? ? ? ]
? ? ? ? },
? ? ? ? ?'revision': {
? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ?'branch': [
? ? ? ? ? ? {
? ? ? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ? ? ?'name': 'refs/remotes/origin/master'
? ? ? ? ? ? }
? ? ? ? ? ]
? ? ? ? }
? ? ? }
? ? },
? ? ?'lastBuiltRevision': {
? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ?'branch': [
? ? ? ? {
? ? ? ? ? ?'SHA1': 'b9200ebf6faf5bad1cda1742b27a48d75918d55c',
? ? ? ? ? ?'name': 'refs/remotes/origin/master'
? ? ? ? }
? ? ? ]
? ? },
? ? ?'remoteUrls': ['git@git.corp.xxx.com:test_job.git'],
? ? ?'scmName': ''
? },
? {},
? {},
? {},
? {},
? {},
? {'_class': 'org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'},
? {
? ? ?'_class': 'org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'
? },
? {},
? {'_class': 'org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'},
? {},
? {},
? {},
? {}
],
?'artifacts': [],
?'building': False,
?'changeSets': [],
?'culprits': [],
?'description': None,
?'displayName': '#1333',
?'duration': 29771,
?'estimatedDuration': 25817,
?'executor': None,
?'fullDisplayName': 'test_job #1333',
?'id': '1333',
?'keepLog': False,
?'nextBuild': {
? ?'number': 1334,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1334/'
},
?'number': 1333,
?'previousBuild': {
? ?'number': 1332,
? ?'url': 'https://jenkins.corp.xxx.com/job/test_job/1332/'
},
?'queueId': 194926,
?'result': 'SUCCESS',
?'timestamp': 1651633320785,
?'url': 'https://jenkins.corp.xxx.com/job/test_job/1333/'
}
获取构建build的打印信息
通过 get_build_console_output方法,可以获取到指定job在指定构建编号下的打印信息。
获取到信息之后,就可以使用脚本进行处理提取信息了。
其他操作
jenkins模块,还提供了其他的一些操作,如创建job,修改job配置,创建node等等。这些就不再介绍了,直接参考官方文档即可: API reference — Python Jenkins 1.1.1.dev1 documentation
|