【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命令…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
【解密LSTM、GRU如何解决传统RNN梯度消失问题】
解密LSTM与GRU:如何让RNN变得更聪明? 在深度学习的世界里,循环神经网络(RNN)以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而,传统RNN存在的一个严重问题——梯度消失&#…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用
1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
【C++】纯虚函数类外可以写实现吗?
1. 答案 先说答案,可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...
