IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> python使用python-jenkins插件操作jenkins -> 正文阅读

[系统运维]python使用python-jenkins插件操作jenkins

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_server:jenkins的网站链接

  • username:用户名

  • password: 该用户的token

如果jenkins的网站是https的方式,那么连接过程中会有证书认证。如果jenkins的证书是自签发的,那么是可能连接失败的。

可以在连接jenkins之前,加入如下代码,不认证证书

import os
os.environ['PYTHONHTTPSVERIFY'] = '0'

连接成功后,就可以通过server这个类实例,来对jenkins进行操作了。

job操作

job的操作,主要使用以下方法

方法参数说明
get_job_infojob_name获取指定job的信息
build_jobjob_name,parameters构建指定的job,并且传入参数。参数是一个字典
get_build_infojob_name,number获取指定job的指定构建number的构建信息
get_build_console_outputjob_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:上一次构建的信息。是一个字典,该字典有如下参数:

    • number:构建编号

    • url:构建对应的url

  • 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/'
}
  • actions:job执行过程中的一些操作。是一个列表,从该列表中,还可以获取到git的操作信息

  • building:是否在构建中。True:该job在构建中,False:该job已经构建结束

  • displayName:构建的显示名称

  • duration:该构建的持续时间,单位是秒

  • id:构建编号

  • result:构建结果,字符串表示

    • SUCCESS:构建成功

    • FAILURE:构建失败

  • url:该构建的链接

获取构建build的打印信息

通过 get_build_console_output方法,可以获取到指定job在指定构建编号下的打印信息。

获取到信息之后,就可以使用脚本进行处理提取信息了。

其他操作

jenkins模块,还提供了其他的一些操作,如创建job,修改job配置,创建node等等。这些就不再介绍了,直接参考官方文档即可: API reference — Python Jenkins 1.1.1.dev1 documentation

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-05 12:01:58  更:2022-05-05 12:03:41 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:48:14-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码