【Jenkins】远程API接口:Java 包装接口使用示例
jenkins-rest 库是一个面向对象的 Java 项目,它通过编程方式提供对 Jenkins REST API 的访问,以访问 Jenkins 提供的一些远程 API。它使用 jclouds 工具包构建,可以轻松扩展以支持更多 REST 端点。其功能集不断发展,用户可以通过拉取请求贡献新的端点。在当前状态下,使用此库可以提交作业、跟踪其通过队列的进度并监控其执行直到完成,并获取构建状态。目前提供的服务包括:
- 端点定义(属性或环境变量)
- 身份验证(通过属性或环境变量进行基本和 API 令牌)
- Crumbs Issuer 支持(自动检测 crumbs)
- 文件夹支持
- 作业 API(构建、构建信息、带参数构建、配置、创建、删除、描述、禁用、启用、作业信息、最后构建编号、最后构建时间戳和渐进文本)
- 插件管理器 API(安装必要的插件、列出当前插件)
- 队列 API(取消、列出队列项、查询队列项)
- 统计 API(总体负载)
- 系统 API(系统信息)
引入依赖jar包
在工程pom.xml文件中引入如下配置,classifier
配置一定要加上:
<dependency><groupId>io.github.cdancy</groupId><artifactId>jenkins-rest</artifactId><version>1.0.2</version><classifier>all</classifier>
</dependency>
注意,jenkins-rest 要求至少 jdk11,可以在这里查看
使用代码示例
假设Jenkins地址是 http://192.168.56.114:8080
1、初始化客户端链接
private static JenkinsClient client;
private static final String JENKINS_URL = "http://192.168.56.114:8080";public static void init() {client = JenkinsClient.builder().endPoint(JENKINS_URL) // Jenkins地址.credentials("admin:admin123") // 账号密码..build();SystemInfo systemInfo = client.api().systemApi().systemInfo();log.info("jenkinsVersion: {}", systemInfo.jenkinsVersion());
}
2、查询任务列表
public static void jobs() {JobsApi jobsApi = client.api().jobsApi();JobList jobList = jobsApi.jobList("");jobList.jobs().forEach(job -> System.out.println(job.name()));
}
3、触发无参任务构建
返回的value不为null,代表执行成功
public static void build() {JobsApi jobsApi = client.api().jobsApi();// 必须是无参数任务String jobName = "job_no_params";IntegerResponse response = jobsApi.build("", jobName);System.out.println("build = " + response);// 返回的value不为null,代表执行成功if (response.value() != null) {System.out.println("任务执行成功:" + jobName);} else {System.out.println("任务执行失败:" + response.errors());}
}
4、触发有参任务构建
这里的任务必须是带参数的,如果调用的无参任务,会报错!
返回的value不为null,代表执行成功
public static void buildWithParameters() {JobsApi jobsApi = client.api().jobsApi();Map<String, List<String>> properties = new HashMap<>();properties.put("ENV", Collections.singletonList("prod"));// 必须是有参数任务String jobName = "job_with_params";IntegerResponse response = jobsApi.buildWithParameters("", jobName, properties);System.out.println("buildWithParameters = " + response);// 返回的value不为null,代表执行成功if (response.value() != null) {System.out.println("任务执行成功:" + jobName);} else {System.out.println("任务执行失败:" + response.errors());}
}
5、创建新任务
创任务必须传入xml配置数据
public static void createJob() {JobsApi jobsApi = client.api().jobsApi();String configXml = "<?xml version='1.1' encoding='UTF-8'?>\n" +"<flow-definition plugin=\"workflow-job@1385.vb_58b_86ea_fff1\">\n" +" <actions>\n" +" <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin=\"pipeline-model-definition@2.2151.ve32c9d209a_3f\"/>\n" +" <org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction plugin=\"pipeline-model-definition@2.2151.ve32c9d209a_3f\">\n" +" <jobProperties/>\n" +" <triggers/>\n" +" <parameters/>\n" +" <options/>\n" +" </org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobPropertyTrackerAction>\n" +" </actions>\n" +" <description></description>\n" +" <keepDependencies>false</keepDependencies>\n" +" <properties/>\n" +" <definition class=\"org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition\" plugin=\"workflow-cps@3826.v3b_5707fe44da_\">\n" +" <script>pipeline {\n" +" agent any\n" +" environment {\n" +" CC = 'clang'\n" +" }\n" +" stages {\n" +" stage('Example') {\n" +" environment {\n" +" DEBUG_FLAGS = '-g'\n" +" }\n" +" steps {\n" +" sh 'printenv'\n" +" }\n" +" }\n" +" }\n" +"}</script>\n" +" <sandbox>true</sandbox>\n" +" </definition>\n" +" <triggers/>\n" +" <disabled>false</disabled>\n" +"</flow-definition>\n";String newJobName = "java_api_02";RequestStatus status = jobsApi.create("", newJobName, configXml);if (status.value()) {System.out.println("任务创建成功: " + newJobName);} else {System.out.println("任务创建失败: " + newJobName);}
}
6、删除任务
public static void delete() {JobsApi jobsApi = client.api().jobsApi();String jobName = "api05";RequestStatus status = jobsApi.delete("", jobName);System.out.println("delete = " + status);if (status.value()){System.out.println("任务删除成功: " + jobName);}else{System.out.println("任务删除失败: " + status.errors());}
}
7、禁用/启用任务
public static void disable() {JobsApi jobsApi = client.api().jobsApi();boolean flag = jobsApi.disable("", "api01");System.out.println("disable = " + flag);
}public static void enable() {JobsApi jobsApi = client.api().jobsApi();boolean flag = jobsApi.enable("", "api01");System.out.println("enable = " + flag);
}
8、查询最近构建序号
public static void lastBuildNumber() {JobsApi jobsApi = client.api().jobsApi();String jobName = "job_no_params";Integer lastBuildNumber = jobsApi.lastBuildNumber("", jobName);System.out.println("lastBuildNumber = " + lastBuildNumber);
}
9、Jenkins服务负载情况查询
public static void overallLoad() {OverallLoad overallLoad = client.api().statisticsApi().overallLoad();System.out.println("overallLoad = " + overallLoad);
}
参考
- jenkins-rest
相关文章:
【Jenkins】远程API接口:Java 包装接口使用示例
jenkins-rest 库是一个面向对象的 Java 项目,它通过编程方式提供对 Jenkins REST API 的访问,以访问 Jenkins 提供的一些远程 API。它使用 jclouds 工具包构建,可以轻松扩展以支持更多 REST 端点。其功能集不断发展,用户可以通过拉…...
未能加载工具箱项问题的解决
解决办法是项目属性要设置成any cpu 在解决方案里的所有项目上右键,属性,生成,看目标平台是不是都设置成了any cpu...
算法模板之栈图文详解
🌈个人主页:聆风吟 🔥系列专栏:算法模板、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. ⛳️模拟栈1.1 🔔用数组模拟实现栈1.1.1 👻栈的定义1.1.…...
Ajax Search Pro Live WordPress网站内容实时搜索插件
点击阅读Ajax Search Pro Live WordPress网站内容实时搜索插件原文 Ajax Search Pro Live WordPress网站内容实时搜索插件是 WordPress 最好的实时搜索引擎插件。高度可定制,具有许多功能和选项,可提供最佳结果!用更美观、更高效的搜索引擎替…...
mysql SQL执行超时问题
show variables like max_execution_time 使用这个命令查看了,没有设置sql执行超时时间,那么大概率问题就出在阿里的Druid数据库连接池出了问题 尝试着socketTimeout由60000毫秒改成10000毫秒,果然执行了十几秒就超时报错了 socketTime…...
51单片机基于时间片轮转的简单rtos
早就想写写这个了,正好赶上有点时间,写了一下基于51单片机的时间片轮转调度系统,简单的rtos,呵呵。直接上代码。 //基于51单片机时间片轮转的简单rtos。 #include"reg52.h" sbit led1 P2^7; sbit led2 P2^0; sbit key…...
python pycurl 安装使用
python pycurl 安装使用 本文主要讲下pycurl 安装使用. 1.安装 首先使用 pip 命令安装. pip install pycurl 输出如下: Collecting pycurlUsing cached pycurl-7.45.2.tar.gz (234 kB)ERROR: Command errored out with exit status 1:command: /usr/bin/python3 -c impor…...
C语言数据结构-排序
文章目录 1 排序的概念及运用1.1 排序的概念1.2 排序的应用 2 插入排序2.1 直接插入排序2.2 希尔排序2.3 直接排序和希尔排序对比 3 选择排序3.1 堆排序3.2 直接选择排序 4 交换排序4.1 冒泡排序4.2 快速排序4.2.1 挖坑法14.2.2 挖坑法24.2.3 挖坑法3 5 并归排序6 十万级别数据…...
Spring AOP入门指南:轻松掌握面向切面编程的基础知识
面向切面编程 1,AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2,AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给…...
【顶级快刊】IEEE(Trans),审稿快仅2个月录用,入选CCF-B,现在投最快!
计算机类 • 好刊解读 今天小编带来IEEE旗下计算机领域顶刊,顶级快刊,CCF-B类推荐,如您有投稿需求,可作为重点关注!后文有相关领域真实发表案例,供您投稿参考~ 01 期刊简介 IEEE Transactions on Affect…...
深入浅出堆排序: 高效算法背后的原理与性能
🎬 鸽芷咕:个人主页 🔥 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想,就是为了理想的生活! 📋 前言 🌈堆排序一个基于二叉堆数据结构的排序算法,其稳定性和排序效率在八大排序中也…...
Golang实践录:gin绑定解析json的两种方法
本文介绍 Golang 的 gin 框架接收json数据并解析的2种方法。 起因及排查 某微服务工程,最近测试发现请求超时,由于特殊原因超时较短,如果请求处理耗时超过1秒则认为失败。排查发现,可能是gin接收解析json数据存在耗时,…...
Hypervisor Display架构
Hypervisor Display架构部分 1,所有LA侧的APP与显示相关的调用最终都会交由SurfaceFlinger处理 2,SurfaceFlinger会最终调用android.hardware.graphics.composer2.4-service服务 3,android.hardware.graphics.composer2.4-service服务会调用G…...
基于ssm二手车交易平台的设计论文
摘 要 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使二手交易网站的发展。二手交易网站可以实现远程购物,远程选择喜欢的商品…...
IDEA 设置 SpringBoot logback 彩色日志(附配置文件)
1、背景说明 最开始使用 SpringBoot 时,控制台日志是带彩色的,让人眼前一亮😄 后来彩色莫名丢失,由于影响不大,一直没有处理。 2、配置彩色 最近找到了解决方法(其实是因为自定义 logback.xml࿰…...
数学建模学习笔记-皮尔逊相关系数
内容:皮尔逊相关系数 一.概念:是一个和线性线关的相关性系数 1.协方差概念: 协方差受到量纲的影响因此需要剔除 2.相关性的误区 根据这个结论,我们在计算该系数之前需要确定是否为线性函数 二.相关性的计算 1.Matlabÿ…...
随笔:集成学习:关于随机森林,梯度提升机的东拉西扯
1.集成学习 这里不会描述算法过程。 当我们有许多学习器对同一个任务做出判断,他们预测的概率可能各不相同,比如预测一个男生(小徐)会不会喜欢另一个女生(小雪),支持向量机算出来小徐爱上小雪的概率是0.8,朴素贝叶斯认为是0.3&a…...
多款实用个人年终总结模板,助力你的年度汇报!
临近年末,相信很多职场人这阵子都在忙着撰写个人年终总结,这份材料是对自己过去一年的工作进行的回顾和总结。撰写年终总结,其实也是一个非常重要的自我反思过程,可以帮助我们明确自己的目标,找出需要改进的地方&#…...
【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化
引言 动态内存管理的函数有:malloc,calloc,ralloc,free,本文讲解动态内存函数和使用,如何进行动态内存管理,实现通讯录联系人容量的动态化,对常见动态内存错误进行总结。 ✨ 猪巴戒:个人主页✨ 所属专栏:《C语言进阶》…...
Centos9(Stream)配置Let‘s Encrypt (免费https证书)
1. 安装snap,用来安装certbot: sudo dnf install epel-release sudo dnf upgrade sudo yum install snapd sudo systemctl enable --now snapd.socket sudo ln -s /var/lib/snapd/snap /snap snap install core snap refresh core 2. 安装 certbot命令…...
Spring之事务(2)
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您: 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持,想组团高效学习… 想写博客但无从下手,急需…...
嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑
一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等),Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…...
Elasticsearch:什么是文本分类?
文本分类定义 - text classification 文本分类是一种机器学习,它将文本文档或句子分类为预定义的类或类别。 它分析文本的内容和含义,然后使用文本标签为其分配最合适的标签。 文本分类的实际应用包括情绪分析(确定评论中的正面或负面情绪&…...
指针(3)
C语言昂,指针昂,最喜欢的一集,小时候学这一课我直接取地址了。上一篇博客给大家讲解了不同类型的指针变量的大小,今天来给大家讲解一下根据其所产生的一些性质。(往期回顾:指针(2)-C…...
外汇天眼:我碰到外汇投资骗局了吗?学会这5招,轻松识别外汇诈骗黑平台!
近年来外汇市场因为交易量大、流动性大、不容易被控盘、品种简单、风险相对低等特色,因此吸引不少投资人青睐,成为全球金融市场的热门选择。 然而,市面上充斥许多诈骗集团设立的黑平台,也打着投资外汇的名义行骗,不免会…...
一文解析子网掩码和默认网关,成为网络设置达人
随着互联网的普及,越来越多的人开始接触并使用电脑和网络。然而,对于很多初学者来说,网络设置中的子网掩码和默认网关是两个相对陌生的概念。今天,我们就来深入解析这两个概念,让你轻松掌握网络设置技巧! …...
二分查找法详解(6种变形)
前言 在之前的博客中,我给大家介绍了最基础的二分查找法(没学的话点我点我!) 今天我将带大家学习二分法的六种变形如何使用,小伙伴们,快来开始今天的学习吧! 文章目录 1,查找第一个…...
uniapp uview 页面多个select组件回显处理,默认选中
<view class"add-item column space-around" click"selectClick(1)"><text class"w-s-color-3 f-28">商品分类</text><view class"w-100 space-between"><!-- 第一个参数为你的单选数组,第二个…...
linux中playbook的控制语句
本章主要介绍 playbook中的控制语句。 使用 when 判断语句 block-rescue判断 循环语句 一个play中可以包含多个task,如果不想所有的task全部执行,可以设置只有满足某个 条件才执行这个task,不满足条件则不执行此task。本章主要讲解when 和 …...
MongoDB介绍
一、MongoDB介绍 1.1 mongoDB介绍 MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …...
网站建设服务标语/微信引流推广怎么做
1. tortoiseSVN 关于 tortoiseSVN 的安装使用详见博文 TortoiseSVN的安装及其简单使用。 2. VisualSVN Server 关于 VisualSVN Server 的安装使用详见博文 VisualSVN-Server服务器的搭建。 或参考 VisualSVN Server的配置和使用方法(转) 。 另外需要说明…...
北京网站制作多少钱/百度竞价推广投放
用户 sa 登录失败。该用户与可信 SQL Server 连接无关联。 说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 用户 sa 登…...
湖南网站开发/网络推广外包流程
最近在做的项目有一项需要耗时任务在后台运行的功能,虽然PHP并不是非常适合做常驻后台的守护进程,但是由于项目主要代码都是基于PHP实现,如果运行在后台的守护进程改换别的语言会非常不方便。所以不可避免会涉及到Web端和Daemon部分的通信&am…...
网站后台密码怎么改/影视后期培训班一般要多少钱
目录 1. HashShuffleManager 2. 优化的 HashShuffleManager 3 spark SortShuffle流程 4 Tungsten Sort Shuffle 运行机制 5 SortShuffle具体详解 5.1 map阶段 5.2 Reduce阶段 1. HashShuffleManager shuffle write 阶段,主要就是在一个 stage 结束计算之后&…...
微信小程序二维码/seo 优化 工具
一、shell脚本的初识 二、shell脚本的创建与运行方式 三、shell脚本的变量定义 四、shell脚本的判断语句 五、shell脚本的循环语句 六、...
网站收录原创文章/上海关键词推广公司
jQuery自己定义绑定 首先让我们来看看jQuery的自己定义绑定的用法,你能够使用bind或者live来订阅一个事件(当然1.7以后也能够使用on了),代码例如以下: $("#myElement").bind(customEventName,function(e){ .…...