当前位置: 首页 > news >正文

【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 = &apos;clang&apos;\n" +"    }\n" +"    stages {\n" +"        stage(&apos;Example&apos;) {\n" +"            environment {\n" +"                DEBUG_FLAGS = &apos;-g&apos;\n" +"            }\n" +"            steps {\n" +"                sh &apos;printenv&apos;\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 项目&#xff0c;它通过编程方式提供对 Jenkins REST API 的访问&#xff0c;以访问 Jenkins 提供的一些远程 API。它使用 jclouds 工具包构建&#xff0c;可以轻松扩展以支持更多 REST 端点。其功能集不断发展&#xff0c;用户可以通过拉…...

未能加载工具箱项问题的解决

解决办法是项目属性要设置成any cpu 在解决方案里的所有项目上右键&#xff0c;属性&#xff0c;生成&#xff0c;看目标平台是不是都设置成了any cpu...

算法模板之栈图文详解

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;算法模板、数据结构 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 &#x1f4cb;前言一. ⛳️模拟栈1.1 &#x1f514;用数组模拟实现栈1.1.1 &#x1f47b;栈的定义1.1.…...

Ajax Search Pro Live WordPress网站内容实时搜索插件

点击阅读Ajax Search Pro Live WordPress网站内容实时搜索插件原文 Ajax Search Pro Live WordPress网站内容实时搜索插件是 WordPress 最好的实时搜索引擎插件。高度可定制&#xff0c;具有许多功能和选项&#xff0c;可提供最佳结果&#xff01;用更美观、更高效的搜索引擎替…...

mysql SQL执行超时问题

show variables like max_execution_time 使用这个命令查看了&#xff0c;没有设置sql执行超时时间&#xff0c;那么大概率问题就出在阿里的Druid数据库连接池出了问题 尝试着socketTimeout由60000毫秒改成10000毫秒&#xff0c;果然执行了十几秒就超时报错了 socketTime…...

51单片机基于时间片轮转的简单rtos

早就想写写这个了&#xff0c;正好赶上有点时间&#xff0c;写了一下基于51单片机的时间片轮转调度系统&#xff0c;简单的rtos&#xff0c;呵呵。直接上代码。 //基于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&#xff0c;AOP简介1.1 什么是AOP?1.2 AOP作用1.3 AOP核心概念 2&#xff0c;AOP入门案例2.1 需求分析2.2 思路分析2.3 环境准备2.4 AOP实现步骤步骤1:添加依赖步骤2:定义接口与实现类步骤3:定义通知类和通知步骤4:定义切入点步骤5:制作切面步骤6:将通知类配给…...

【顶级快刊】IEEE(Trans),审稿快仅2个月录用,入选CCF-B,现在投最快!

计算机类 • 好刊解读 今天小编带来IEEE旗下计算机领域顶刊&#xff0c;顶级快刊&#xff0c;CCF-B类推荐&#xff0c;如您有投稿需求&#xff0c;可作为重点关注&#xff01;后文有相关领域真实发表案例&#xff0c;供您投稿参考~ 01 期刊简介 IEEE Transactions on Affect…...

深入浅出堆排序: 高效算法背后的原理与性能

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《linux深造日志》 《高效算法》 ⛺️生活的理想&#xff0c;就是为了理想的生活! &#x1f4cb; 前言 &#x1f308;堆排序一个基于二叉堆数据结构的排序算法&#xff0c;其稳定性和排序效率在八大排序中也…...

Golang实践录:gin绑定解析json的两种方法

本文介绍 Golang 的 gin 框架接收json数据并解析的2种方法。 起因及排查 某微服务工程&#xff0c;最近测试发现请求超时&#xff0c;由于特殊原因超时较短&#xff0c;如果请求处理耗时超过1秒则认为失败。排查发现&#xff0c;可能是gin接收解析json数据存在耗时&#xff0c…...

Hypervisor Display架构

Hypervisor Display架构部分 1&#xff0c;所有LA侧的APP与显示相关的调用最终都会交由SurfaceFlinger处理 2&#xff0c;SurfaceFlinger会最终调用android.hardware.graphics.composer2.4-service服务 3&#xff0c;android.hardware.graphics.composer2.4-service服务会调用G…...

基于ssm二手车交易平台的设计论文

摘 要 进入21世纪网络和计算机得到了飞速发展&#xff0c;并和生活进行了紧密的结合。目前&#xff0c;网络的运行速度以达到了千兆&#xff0c;覆盖范围更是深入到生活中的角角落落。这就促使二手交易网站的发展。二手交易网站可以实现远程购物&#xff0c;远程选择喜欢的商品…...

IDEA 设置 SpringBoot logback 彩色日志(附配置文件)

1、背景说明 最开始使用 SpringBoot 时&#xff0c;控制台日志是带彩色的&#xff0c;让人眼前一亮&#x1f604; 后来彩色莫名丢失&#xff0c;由于影响不大&#xff0c;一直没有处理。 2、配置彩色 最近找到了解决方法&#xff08;其实是因为自定义 logback.xml&#xff0…...

数学建模学习笔记-皮尔逊相关系数

内容&#xff1a;皮尔逊相关系数 一.概念&#xff1a;是一个和线性线关的相关性系数 1.协方差概念&#xff1a; 协方差受到量纲的影响因此需要剔除 2.相关性的误区 根据这个结论&#xff0c;我们在计算该系数之前需要确定是否为线性函数 二.相关性的计算 1.Matlab&#xff…...

随笔:集成学习:关于随机森林,梯度提升机的东拉西扯

1.集成学习 这里不会描述算法过程。 当我们有许多学习器对同一个任务做出判断&#xff0c;他们预测的概率可能各不相同&#xff0c;比如预测一个男生(小徐)会不会喜欢另一个女生(小雪)&#xff0c;支持向量机算出来小徐爱上小雪的概率是0.8&#xff0c;朴素贝叶斯认为是0.3&a…...

多款实用个人年终总结模板,助力你的年度汇报!

临近年末&#xff0c;相信很多职场人这阵子都在忙着撰写个人年终总结&#xff0c;这份材料是对自己过去一年的工作进行的回顾和总结。撰写年终总结&#xff0c;其实也是一个非常重要的自我反思过程&#xff0c;可以帮助我们明确自己的目标&#xff0c;找出需要改进的地方&#…...

【C语言】动态内存管理基础知识——动态通讯录,如何实现通讯录容量的动态化

引言 动态内存管理的函数有&#xff1a;malloc,calloc,ralloc,free,本文讲解动态内存函数和使用&#xff0c;如何进行动态内存管理,实现通讯录联系人容量的动态化&#xff0c;对常见动态内存错误进行总结。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》…...

Centos9(Stream)配置Let‘s Encrypt (免费https证书)

1. 安装snap&#xff0c;用来安装certbot&#xff1a; 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)

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…...

嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑

一、目的/概述 二、资料来源 三、逻辑和包含关系 四、Arm GNU Toolchain最常用的命令 嵌入式科普(5)ARM GNU Toolchain相关概念和逻辑 一、目的/概述 对比高集成度的IDE(MDK、IAR等)&#xff0c;Linux开发需要自己写Makefile等多种脚本。eclipse、Visual Studio等需要了解预处…...

Elasticsearch:什么是文本分类?

文本分类定义 - text classification 文本分类是一种机器学习&#xff0c;它将文本文档或句子分类为预定义的类或类别。 它分析文本的内容和含义&#xff0c;然后使用文本标签为其分配最合适的标签。 文本分类的实际应用包括情绪分析&#xff08;确定评论中的正面或负面情绪&…...

指针(3)

C语言昂&#xff0c;指针昂&#xff0c;最喜欢的一集&#xff0c;小时候学这一课我直接取地址了。上一篇博客给大家讲解了不同类型的指针变量的大小&#xff0c;今天来给大家讲解一下根据其所产生的一些性质。&#xff08;往期回顾&#xff1a;指针&#xff08;2&#xff09;-C…...

外汇天眼:我碰到外汇投资骗局了吗?学会这5招,轻松识别外汇诈骗黑平台!

近年来外汇市场因为交易量大、流动性大、不容易被控盘、品种简单、风险相对低等特色&#xff0c;因此吸引不少投资人青睐&#xff0c;成为全球金融市场的热门选择。 然而&#xff0c;市面上充斥许多诈骗集团设立的黑平台&#xff0c;也打着投资外汇的名义行骗&#xff0c;不免会…...

一文解析子网掩码和默认网关,成为网络设置达人

随着互联网的普及&#xff0c;越来越多的人开始接触并使用电脑和网络。然而&#xff0c;对于很多初学者来说&#xff0c;网络设置中的子网掩码和默认网关是两个相对陌生的概念。今天&#xff0c;我们就来深入解析这两个概念&#xff0c;让你轻松掌握网络设置技巧&#xff01; …...

二分查找法详解(6种变形)

前言 在之前的博客中&#xff0c;我给大家介绍了最基础的二分查找法&#xff08;没学的话点我点我&#xff01;&#xff09; 今天我将带大家学习二分法的六种变形如何使用&#xff0c;小伙伴们&#xff0c;快来开始今天的学习吧&#xff01; 文章目录 1&#xff0c;查找第一个…...

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"><!-- 第一个参数为你的单选数组&#xff0c;第二个…...

linux中playbook的控制语句

本章主要介绍 playbook中的控制语句。 使用 when 判断语句 block-rescue判断 循环语句 一个play中可以包含多个task&#xff0c;如果不想所有的task全部执行&#xff0c;可以设置只有满足某个 条件才执行这个task&#xff0c;不满足条件则不执行此task。本章主要讲解when 和 …...

MongoDB介绍

一、MongoDB介绍 1.1 mongoDB介绍 MongoDB 是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB …...

网站建设服务标语/微信引流推广怎么做

1. tortoiseSVN 关于 tortoiseSVN 的安装使用详见博文 TortoiseSVN的安装及其简单使用。 2. VisualSVN Server 关于 VisualSVN Server 的安装使用详见博文 VisualSVN-Server服务器的搭建。 或参考 VisualSVN Server的配置和使用方法&#xff08;转&#xff09; 。 另外需要说明…...

北京网站制作多少钱/百度竞价推广投放

用户 sa 登录失败。该用户与可信 SQL Server 连接无关联。 说明: 执行当前 Web 请求期间&#xff0c;出现未处理的异常。请检查堆栈跟踪信息&#xff0c;以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Data.SqlClient.SqlException: 用户 sa 登…...

湖南网站开发/网络推广外包流程

最近在做的项目有一项需要耗时任务在后台运行的功能&#xff0c;虽然PHP并不是非常适合做常驻后台的守护进程&#xff0c;但是由于项目主要代码都是基于PHP实现&#xff0c;如果运行在后台的守护进程改换别的语言会非常不方便。所以不可避免会涉及到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 阶段&#xff0c;主要就是在一个 stage 结束计算之后&…...

微信小程序二维码/seo 优化 工具

一、shell脚本的初识 二、shell脚本的创建与运行方式 三、shell脚本的变量定义 四、shell脚本的判断语句 五、shell脚本的循环语句 六、...

网站收录原创文章/上海关键词推广公司

jQuery自己定义绑定 首先让我们来看看jQuery的自己定义绑定的用法&#xff0c;你能够使用bind或者live来订阅一个事件&#xff08;当然1.7以后也能够使用on了&#xff09;&#xff0c;代码例如以下&#xff1a; $("#myElement").bind(customEventName,function(e){ .…...