自动化Jenkins管理?使用python-jenkins管理Jenkins

news2024/11/26 5:28:39

点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践

4ab29a59117f3e8e2646517ab0d7ea88.png

今天是「DevOps云学堂」与你共同进步的第 26 

如果这篇文章对您有帮助,欢迎转发点赞分享。您的关注是我持续分享的动力!


4280abc00ae38f397b06c69c7eb4a10c.jpeg

简介

本次我们将要学习JenkinsAPI接口,我们先用Python-jenkins这个库完成。

仓库Pypi :https://pypi.org/project/python-jenkins/

在线文档: http://python-jenkins.readthedocs.org/en/latest/

当前环境Python版本 v3.7.0

功能

  • Create new jobs  创建新项目    

  • Copy existing jobs   复制已存在的项目

  • Delete jobs  删除项目

  • Update jobs  更新项目

  • Get a job’s build information   获取一个项目的构建信息

  • Get Jenkins master version information   获取Jenkins master的版本信息

  • Get Jenkins plugin information  过去jenkins插件信息

  • Start a build on a job  构建一个项目

  • Create nodes  创建一个节点  

  • Enable/Disable nodes  启用/禁用节点

  • Get information on nodes  获取节点信息

  • Create/delete/reconfig views  创建/删除/更新视图

  • Put server in shutdown mode (quiet down)  关机

  • List running builds  列出构建中的项目

  • Delete builds  删除构建

  • Wipeout job workspace  

  • Create/delete/update folders  创建/删除/更新文件夹

  • Set the next build number 设置下次构建ID

  • Install plugins   安装插件

使用思路

例如我要创建一个项目

  1. 要先找到创建项目的方法

  2. 然后根据API文档查阅如何使用 每个接口的使用方法

  3. 打开一个python解释器调试

初始化配置

安装python-jenkins

pip install python-jenkins==1.6.0

测试

ZeyangdeMacBook-Pro:~ zeyang$ python3
Python 3.7.4 (v3.7.4:e09359112e, Jul  8 2019, 14:54:52)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import jenkins
>>> server = jenkins.Jenkins("http://127.0.0.1:8080",username="admin",password="admin")
>>> server.get_whoami()
{'_class': 'hudson.model.User', 'absoluteUrl': 'http://127.0.0.1:8080/user/admin', 'description': '', 'fullName': 'admin', 'id': 'admin', 'property': [{'_class': 'jenkins.security.ApiTokenProperty'}, {'_class': 'jenkins.security.LastGrantedAuthoritiesProperty'}, {'_class': 'hudson.model.MyViewsProperty'}, {'_class': 'hudson.model.PaneStatusProperties'}, {'_class': 'hudson.security.HudsonPrivateSecurityRealm$Details'}, {'_class': 'org.jenkinsci.main.modules.cli.auth.ssh.UserPropertyImpl'}, {'_class': 'jenkins.security.seed.UserSeedProperty'}, {'_class': 'hudson.search.UserSearchProperty', 'insensitiveSearch': True}, {'_class': 'hudson.model.TimeZoneProperty'}]}

查看 所有的方法

>>> dir(server)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_add_missing_builds', '_auth_resolved', '_auths', '_build_url', '_get_encoded_params', '_get_job_folder', '_get_tag_text', '_get_view_jobs', '_maybe_add_auth', '_request', '_response_handler', '_session', '_timeout_warning_issued', 'assert_credential_exists', 'assert_folder', 'assert_job_exists', 'assert_node_exists', 'assert_promotion_exists', 'assert_view_exists', 'auth', 'build_job', 'build_job_url', 'cancel_queue', 'check_jenkinsfile_syntax', 'copy_job', 'create_credential', 'create_folder', 'create_job', 'create_node', 'create_promotion', 'create_view', 'credential_exists', 'crumb', 'debug_job_info', 'delete_build', 'delete_credential', 'delete_job', 'delete_node', 'delete_promotion', 'delete_view', 'disable_job', 'disable_node', 'enable_job', 'enable_node', 'get_all_jobs', 'get_build_console_output', 'get_build_env_vars', 'get_build_info', 'get_build_test_report', 'get_credential_config', 'get_credential_info', 'get_info', 'get_job_config', 'get_job_info', 'get_job_info_regex', 'get_job_name', 'get_jobs', 'get_node_config', 'get_node_info', 'get_nodes', 'get_plugin_info', 'get_plugins', 'get_plugins_info', 'get_promotion_config', 'get_promotion_name', 'get_promotions', 'get_promotions_info', 'get_queue_info', 'get_queue_item', 'get_running_builds', 'get_version', 'get_view_config', 'get_view_name', 'get_views', 'get_whoami', 'install_plugin', 'is_folder', 'jenkins_open', 'jenkins_request', 'job_exists', 'jobs_count', 'list_credentials', 'maybe_add_crumb', 'node_exists', 'promotion_exists', 'quiet_down', 'reconfig_credential', 'reconfig_job', 'reconfig_node', 'reconfig_promotion', 'reconfig_view', 'rename_job', 'run_script', 'server', 'set_next_build_number', 'stop_build', 'timeout', 'upsert_job', 'view_exists', 'wait_for_normal_op', 'wipeout_job_workspace']

do操作方法

功能python方法
项目操作create_job disable_job  delete_job copy_job enable_job  job_exists  jobs_count upsert_job
构建操作build_job delete_build build_job_url  stop_build
凭据操作create_credential delete_credentialcredential_exists
视图操作create_view  delete_view view_exists
节点操作create_node disable_node delete_node enable_node node_exists
晋级操作create_promotion  delete_promotion promotion_exists
取消队列cancel_queue
检查jenkinsfile语法check_jenkinsfile_syntax
检查项目信息debug_job_info
文件夹操作is_folder create_folder
安装插件install_plugin

get获取方法

功能python方法
获取项目信息get_all_jobs get_job_config get_job_info get_job_info_regex get_job_name get_jobs
获取构建信息get_build_console_output get_build_env_vars get_build_info  get_build_test_report
获取凭据信息get_credential_config   get_credential_info list_credentials

get_info
获取节点信息get_node_config get_node_info get_nodes
获取插件信息get_plugin_info get_plugins get_plugins_info
获取晋级信息get_promotion_config get_promotion_name get_promotions  get_promotions_info
获取队列信息get_queue_info get_queue_item
获取运行中构建get_running_builds
获取版本get_version
获取视图信息get_view_config  get_view_name get_views
获取当前用户get_whoami

jenkins_open

jenkins_request

更新操作

功能python方法
关机quiet_down
更新凭据reconfig_credential
更新项目reconfig_job
更新节点reconfig_node
更新晋级reconfig_promotion
更新视图reconfig_view
重命名项目rename_job
运行脚本run_script
设置下次构建id

set_next_build_number

演示实例

每个接口的使用方法:https://python-jenkins.readthedocs.io/en/latest/api.html

项目操作

我们需要认识一下Jenkins项目的config.xml,大部分API在创建项目的时候会使用xml文件。首先创建一个项目(任何类型的都可以)然后我们进入$JENKINS_HOME/jobs/目录查看我们这个项目生成的config.xml文件。

builds存放项目的构建信息。

ZeyangdeMacBook-Pro:jobs zeyang$ ls
demo-test
ZeyangdeMacBook-Pro:jobs zeyang$ ls demo-test/
buildsconfig.xml

config.xml

可以看到jenkins的文件存储都是以xml方式存储的。(后面我们需要利用这个xml创建一个新项目)

<?xml version='1.1' encoding='UTF-8'?>
<project>
  <description>test</description>
  <keepDependencies>false</keepDependencies>
  <properties/>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders/>
  <publishers/>
  <buildWrappers/>
</project>

使用方法获取项目配置信息

server.get_job_config("demo-test")

'<?xml version=\'1.1\' encoding=\'UTF-8\'?>\n<project>\n  <description>test</description>\n  <keepDependencies>false</keepDependencies>\n  <properties/>\n  <scm class="hudson.scm.NullSCM"/>\n  <canRoam>true</canRoam>\n  <disabled>false</disabled>\n  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>\n  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>\n  <triggers/>\n  <concurrentBuild>false</concurrentBuild>\n  <builders/>\n  <publishers/>\n  <buildWrappers/>\n</project>'

掌握创建项目的方法使用

create_job(name, config_xml)

  • name 项目名称 字符串类型

  • config_xml 配置文件 字符串类型

新建项目demo-test-02

config_xml = server.get_job_config("demo-test")
server.create_job("demo-test-02",config_xml)

验证项目是否创建成功

server.job_exists("demo-test-02")
True

复制一个新项目demo-test-03

copy_job(from_name, to_name)

  • from_name 源项目 字符串类型

  • to_name 目标项目 字符串类型

当源项目名称与目标项目名称一致的时候会报错。JenkinsException

>>> server.copy_job("demo-test-02","demo-test-03")
>>> server.job_exists("demo-test-03")
True

写一个脚本用于项目创建

新建一个项目,增加一个参数srcType用于分辨项目所使用的的版本控制系统类型。参数可以是(svn,git)。

我们要完成的是基于一个项目模板,创建新的项目并替换相关的参数。模板项目名称demo-devops-service

cb17114f7cb9323f39c5ca55acf88b42.png

import jenkins

#login
serverUrl = "http://127.0.0.1:8080"
username = "admin"
password = "admin"
server = jenkins.Jenkins(serverUrl,username,password)

defProjectName = "demo-devops-service"
newProjectName = "demo-test-service"


if server.job_exists(newProjectName) != True :
    print("项目不存在开始新建项目")
    
    config_xml=server.get_job_config(defProjectName)
    newconfig_xml = config_xml.replace("<defaultValue>svn</defaultValue>","<defaultValue>git</defaultValue>")
    
    print(newconfig_xml)

    server.create_job(newProjectName,newconfig_xml)
else:
    print("项目已存在!")

运行输出

ZeyangdeMacBook-Pro:codes zeyang$ python3 josbtest.py
项目不存在开始新建项目
<?xml version='1.1' encoding='UTF-8'?>
<project>
  <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <hudson.model.ParametersDefinitionProperty>
      <parameterDefinitions>
        <hudson.model.StringParameterDefinition>
          <name>srcType</name>
          <description></description>
          <defaultValue>git</defaultValue>
          <trim>false</trim>
        </hudson.model.StringParameterDefinition>
      </parameterDefinitions>
    </hudson.model.ParametersDefinitionProperty>
  </properties>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders/>
  <publishers/>
  <buildWrappers/>
</project>

效果

f16d2f991e25cf691b143653996b70fa.png


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566090.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scrapy数据爬取,Django+PyEcharts实现可视化大屏(附源码)

大家好&#xff0c;我是小F&#xff5e; 最近有个小伙伴问我有没有基于Django的可视化大屏&#xff0c;小F就顺手找了一下。 于是便在GitHub上发现了一个不错的实战项目&#xff0c;基于qunaer长沙景点数据。 还是作者最近几天刚更新的&#xff0c;保真~ 项目地址&#xff1a; …

Rust每日一练(Leetday0010) 子串下标、两数相除、串联子串

目录 28. 找出字符串中第一个匹配项的下标 Find-the-index-of-the-first-occurrence-in-a-string &#x1f31f;&#x1f31f; 29. 两数相除 Divide Two Integers &#x1f31f;&#x1f31f; 30. 串联所有单词的子串 Substring-with-concatenation-of-all-words &#x…

FL Studio 21最新中文版本发布!原生插件、UI、操作优化全面更新!

FL Studio 21现已推出&#xff0c;提供更快、更精确的音频编辑&#xff0c;升级后的DAW为用户提供了更多的内容发现和改进的界面。 Image-Line发布了FL Studio 21&#xff0c;称其可以实现更快、更精确的音频编辑&#xff0c;以及对整个DAW的更多控制。 期待已久的DAW升级为用…

网络安全的学习路线是怎么样的?

在众多高大上的学习路线指导中&#xff0c;尝试做一股清流&#xff0c;把要讲清楚的都讲清楚&#xff0c;该学些什么&#xff0c;学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划&#xff1a; 1.目前市场需求主流的岗位里&#xff0…

苏州狮山广场能耗管理系统

摘要&#xff1a;随着社会生活水平的提高&#xff0c;经济的繁荣发展&#xff0c;人们对能源的需求逐渐增长&#xff0c;由此带来的能源危机日益严重。商场如何实时的了解、分析和控制商场的能源消耗已成为需要解决的迫在眉睫的难题。传统的能源消耗智能以月/季度/年为周期进行…

springboot+jsp+java高校实验室设备管理系统

本次程序软件的开发的目的就是让使用者可以通过使用该软件提高信息数据的管理效率&#xff0c;同时该程序软件也需要针对不同的操作用户设置对应的功能&#xff0c;因此&#xff0c;此程序的操作流程应该尽量与用户日常操作软件的行为习惯相贴合&#xff0c;另外&#xff0c;程…

国内开源的中文Docker管理工具,界面清爽,赞!

文章目录 一、docker.ui1、简介2、docker.ui安装3、启动效果 一、docker.ui 1、简介 一个用于docker容器和docker集群的可视化管理工具&#xff0c;您可以浏览和维护docker单节点或集群节点worker和Manager。 2、docker.ui安装 安装命令如下&#xff1a; docker run --name…

Selinux 安全上下文与端口控制

Selinux Selinux 的全称是Security Enhance Linux&#xff0c;就是安全加强的Linux。在Selinux之前root账号能够任意的访问所有文档和服务在selinux中&#xff0c;访问控制属性叫做安全上下文&#xff0c;所有客体&#xff08;文件、进程间通讯通道、套接字、网络主机等&#…

创客匠人CEO蒋洪波:抓住抓住市场需求发展

拍手访谈创客匠人CEO蒋洪波&#xff1a;创客匠人是如何开始的&#xff1f;未来又将如何发展&#xff1f; 一、创客匠人知识付费是如何开始的&#xff1f; 1.从爱好出发 我本人喜欢做产品&#xff0c;或者说是喜欢研究产品。 得益于在研发产品上的一些天赋&#xff0c;我们产品…

第五十一天学习记录:C语言进阶:枚举和联合(共用体)

枚举顾名思义就是一一列举。 枚举的优点 我们可以使用#define定义常量&#xff0c;为什么非要使用枚举&#xff1f; 1、增加代码的可读性和可维护性 2、和#define定义的标识符比较枚举有类型检查&#xff0c;更加严谨 3、防止了命名污染&#xff08;封装&#xff09; 4、便于…

【Simulink】示波器图形数据导入Matlab重新绘图(论文)

版本&#xff1a;Matlab2019b 效果 示波器波形图片&#xff1a; 黑色背景&#xff0c;而且坐标轴字体较小&#xff0c;不方便修改&#xff0c;不能直接用在论文上面 对比 Matlab 绘图&#xff1a; 接下来介绍如何设置~ Simulink 设置 选择需要导入的示波器数据 点击 Vi…

termux-x11教程

小粉丝已经求稿两个星期了&#xff0c;不写是不行了。 termux-x11 是Termux的一个图形化项目&#xff0c;官方是这么介绍的。 A Termux add-on app providing Android frontend for Xwayland.安装工具 我们需要在Termux和安卓系统上安装工具以成功的运行程序。 x11-repo&am…

实现图片懒加载的5种方式

目录 1、懒加载介绍 2、实现懒加载技术的方案 3、具体实现代码 1、懒加载介绍 当页面需要展示大量图片时&#xff0c;如果一次性渲染所有图片&#xff0c;会向服务器发出大量请求&#xff0c;导致服务器响应慢&#xff0c;出现页面卡顿或崩溃等问题。采用懒加载技术只预先加…

渗透测试 | 指纹识别

0x00 免责声明 本文仅限于学习讨论与技术知识的分享&#xff0c;不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;本文作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担…

LC-3中断实验

一、实验目的 学会分析和理解给定的编程问题&#xff1b;掌握中断驱动的基本原理&#xff1b;掌握键盘数据寄存器&#xff08;KBDR)及键盘状态寄存器&#xff08;KBSR&#xff09;工作基本原理&#xff1b;掌握输出数据寄存器&#xff08;DDR)及输出状态寄存器&#xff08;DSR…

Splunk安装配置

前言 Splunk 社区 &#xff0c;包括白皮书&#xff0c;各类手册&#xff0c;资源下载&#xff0c;社区问答等 入门&#xff1a;Splunk 入门指南 | Splunk 手册&#xff1a;Splunk Enterprise - Splunk Documentation 资源下载:数据可视化工具Splunk Enterprise免费下载 | S…

chatgpt赋能python:Python对Word文档的支持——打造高效办公新选择

Python对Word文档的支持——打造高效办公新选择 在现代社会&#xff0c;文档处理和管理已成为各行各业不可或缺的一部分。在这个领域中&#xff0c;Word文档一直占据主导地位&#xff0c;成为了几乎所有企业和机构必备的工具。而Python作为一门众所周知的高效编程语言&#xf…

雅思口语话题准备(一)

目录 where are you from&#xff1f; 3.Will you live in the countryside in the future? 4.Have you learned the history of your hometown at school? Does your name have any particular(or special)meaning? 作为一个英语音标大师&#xff0c;请问ɒ和ɔ他们之间有…

chatgpt赋能python:Python%(.2f)怎么用?从入门到进阶

Python%(.2f)怎么用&#xff1f;从入门到进阶 Python作为一种高效的编程语言&#xff0c;拥有广泛的应用领域&#xff0c;尤其在AI、数据分析、Web开发以及自动化运维等方面得到了广泛的应用&#xff0c;成为当下最受欢迎的编程语言之一。在这篇SEO文章中&#xff0c;我们将介…

5月25日第壹简报,星期四,农历四月初七

5月25日第壹简报&#xff0c;星期四&#xff0c;农历四月初七坚持阅读&#xff0c;静待花开1. 教育部&#xff1a;2023年为中西部乡镇卫生院培养订单定向免费五年制本科医学生共计6150人。2. 全球第一个集成人工智能功能的PC系统诞生&#xff01;微软宣布将在6月推出Windows Co…