golang 操作Jenkins

1.創建Agent/Node

func CreateAgent(username string, password string, nodeName string, nodeDescription string, numExecutors string, remoteFS string, labelString string, host string) {var obj stringobj = "{'name':+'" + nodeName + "',+'nodeDescription':+'" + nodeDescription + "',+'numExecutors':+'" + numExecutors + "',+'remoteFS':+'" + remoteFS + "',+'labelString':+'" + labelString + "',+'mode':+'NORMAL',+'':+['hudson.plugins.sshslaves.SSHLauncher',+'0'],+'launcher':+{'stapler-class':+'hudson.plugins.sshslaves.SSHLauncher',+'$class':+'hudson.plugins.sshslaves.SSHLauncher',+'host':+'" + host + "',+'includeUser':+'false',+'credentialsId':+'" + credentialsId + "',+'':+'0',+'sshHostKeyVerificationStrategy':+{'stapler-class':+'hudson.plugins.sshslaves.verifiers.KnownHostsFileKeyVerificationStrategy',+'$class':+'hudson.plugins.sshslaves.verifiers.KnownHostsFileKeyVerificationStrategy'},+'port':+'" + port + "',+'javaPath':+'',+'jvmOptions':+'',+'prefixStartSlaveCmd':+'',+'suffixStartSlaveCmd':+'',+'launchTimeoutSeconds':+'',+'maxNumRetries':+'',+'retryWaitTime':+'',+'tcpNoDelay':+true,+'workDir':+''},+'retentionStrategy':+{'stapler-class':+'hudson.slaves.RetentionStrategy$Always',+'$class':+'hudson.slaves.RetentionStrategy$Always'},+'nodeProperties':+{'stapler-class-bag':+'true'},+'type':+'hudson.slaves.DumbSlave',+'Submit':+''}"jenkinsUser := "Jenkins的用户"jenkinsAPIToken := "Jenkins的token"jsonObject := objjenkinsURL := "http://127.1.1:80" //Jeknins地址data := fmt.Sprintf(`json=%s`, jsonObject)req, err := http.NewRequest("POST", jenkinsURL+"/computer/doCreateItem?name="+nodeName+"&type=hudson.slaves.DumbSlave", bytes.NewBufferString(data))if err != nil {Err("CreateAgent error : %v\n", err)return req.Response.StatusCode}req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("Authorization", fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(jenkinsUser+":"+jenkinsAPIToken))))client := &http.Client{}resp, err := client.Do(req)if err != nil {Err("CreateAgent error : %v\n", err)return resp.StatusCode}defer resp.Body.Close()body, err := io.ReadAll(resp.Body)if err != nil {fmt.Println("读取响应失败:", err)return}fmt.Println("响应内容:", string(body))fmt.Println("\n\n响应状态码 ", resp.StatusCode)}

nodeName                你创建的node的名字

nodeDescription        描述,空也可以

numExecutors           一般1

remoteFS                远程控制的目录,类似 home/Aaron

labelString               不写也可以

host                        远程主机的host

credentialsId          凭证,用来连接到远程主机的

2.创建凭证

func  CreateCredentials(username string, password string, id string)  {var obj stringobj = "{'':+'0',+'credentials':+{'scope':+'GLOBAL',+'username':+'" + username + "',+'usernameSecret':+false,+'password':+'" + password + "',+'$redact':+'password',+'id':+'" + id + "',+'description':+'',+'stapler-class':+'com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl',+'$class':+'com.cloudbees.plugins.credentials.impl.UsernamePasswordCredentialsImpl'},+'Submit':+''}"jenkinsUser := "Jenkins的用户"jenkinsAPIToken := "Jenkins的token"jsonObject := objjenkinsURL := "http://127.1.1:80" //Jeknins地址data := fmt.Sprintf(`json=%s`, jsonObject)req, err := http.NewRequest("POST", jenkinsURL+"/manage/credentials/store/system/domain/_/createCredentials", bytes.NewBufferString(data))if err != nil {Err("CreateCredentials error : %v\n", err)return }req.Header.Set("Content-Type", "application/x-www-form-urlencoded")req.Header.Set("Authorization", fmt.Sprintf("Basic %s", base64.StdEncoding.EncodeToString([]byte(jenkinsUser+":"+jenkinsAPIToken))))client := &http.Client{}resp, err := client.Do(req)if err != nil {Err("CreateCredentials error : %v\n", err)return }defer resp.Body.Close()}

username        创建凭证的用户名

password        创建凭证的密码

id                     凭证的id,唯一,创建node的时候会用到

3.创建Job


func  CreateJob(jobName string, agent string, command string)  {jenkinsURL := "http://127.1.1:80" //Jeknins地址url := jenkinsURL + "/createItem?name=" + jobNamedata := `<project><actions/><description></description><keepDependencies>false</keepDependencies><properties/><scm class="hudson.scm.NullSCM"/><assignedNode>` + agent + `</assignedNode><canRoam>false</canRoam><disabled>false</disabled><blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding><blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding><triggers/><concurrentBuild>false</concurrentBuild><builders><hudson.tasks.Shell><command>` + command + `</command><configuredLocalRules/></hudson.tasks.Shell></builders><publishers/><buildWrappers><hudson.plugins.timestamper.TimestamperBuildWrapper plugin="timestamper@1.25"/></buildWrappers></project>`jenkinsUser := "Jenkins的用户"jenkinsAPIToken := "Jenkins的token"req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte(data)))if err != nil {Err("Error creating request:", err)return req.Response.StatusCode}req.Header.Set("Content-Type", "application/xml")req.SetBasicAuth(jenkinsUser, jenkinsAPIToken)client := &http.Client{}resp, err := client.Do(req)if err != nil {fmt.Println("Error sending request:", err)return}defer resp.Body.Close()
}

jobName                你创建的Job的名字

agent                      你的Job要跑在那个agent/node上面

command                执行的命令,类似 “ls  pwd”等

4.执行Job

func  BuildNow(jobName string)  {jenkinsURL := "http://127.1.1:80" //Jeknins地址url := jenkinsURL + "/job/" + jobName + "/build?delay=0sec"jenkinsUser := "Jenkins的用户"jenkinsAPIToken := "Jenkins的token"req, err := http.NewRequest("POST", url, bytes.NewBuffer([]byte("")))if err != nil {return}req.Header.Set("Content-Type", "application/xml")req.SetBasicAuth(jenkinsUser, jenkinsAPIToken)client := &http.Client{}resp, err := client.Do(req)if err != nil {return}defer resp.Body.Close()}

5.获取Job信息

url := fmt.Sprintf("http://%s@%s:%d/%s/api/json", Token, Addr, Port, api)url = fmt.Sprintf("%s?depth=%d", url, 2)req, err := http.NewRequest("GET", url, bytes.NewBuffer([]byte("")))

Token        jenkins的token

Addr        jenkins地址

Port        jenkins端口号

api        固定写“computer”

这边会返回很多信息,都是json信息,然后你可以自己分析其中的内容。

PS:

这些API 你都可以自己去找,打开Jenkins,打开浏览器开发选项(选择network),然后做你要做的时候,就可以找到对应的API的动作了。Reuqest URL就是 API的地址,往下拉可以看到请求的内容。

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

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

相关文章

YOLOv4 学习笔记

文章目录 前言一、YOLOv4贡献和改进二、YOLOv4核心概念三、YOLOv4网络架构四、YOLOv4数据增强五、YOLOv4的损失函数总结 前言 在近年来的目标检测领域&#xff0c;YOLOv4的出现标志着一个重要的技术突破。YOLOv4不仅继承了YOLO系列快速、高效的特点&#xff0c;还引入了一系列…

【启扬方案】启扬储能管理平板助力储能电站实现智能且高效化运行

在储能领域&#xff0c;储能电站扮演着重要角色&#xff0c;储能电站技术的应用贯穿于电力系统发电、输电、配电、用电的各个环节。实现电力系统削峰填谷、可再生能源发电波动平滑与跟踪计划处理、高效系统调频&#xff0c;增加供电的可靠性。 但随着储能电⼒系统建设发展得越来…

Java网络编程,使用UDP实现TCP(三), 基本实现四次挥手

简介 四次挥手示意图 在四次挥手过程中&#xff0c;第一次挥手中的Seq为本次挥手的ISN&#xff0c; ACK为 上一次挥手的 Seq1&#xff0c;即最后一次数据传输的Seq1。挥手信息由客户端首先发起。 实现步骤&#xff1a; 下面是TCP四次挥手的步骤&#xff1a; 第一次挥手&…

记录一下如何使用python生成二维码 并简单练习命令行参数供初学者参考

主代码main.py 后面是演示效果图&#xff1a; import argparse import sysimport qrcode import os qr qrcode.QRCode(version1,error_correctionqrcode.constants.ERROR_CORRECT_L,box_size10,border4, ) fileList[] fileName[]parserargparse.ArgumentParser(description生…

Ubuntu20.04降低linux版本到5.4.0-26-generic

前言 试用ubuntu20.04安装昇腾的驱动和cann的时&#xff0c;出现如下问题&#xff1a; (base) rootubuntu:/home/work# ./Ascend-hdk-910-npu-driver_23.0.rc3_linux-aarch64.run --full Verifying archive integrity... 100% SHA256 checksums are OK. All good. Uncompr…

基于Python+WaveNet+MFCC+Tensorflow智能方言分类—深度学习算法应用(含全部工程源码)(三)

目录 前言引言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 模型构建1&#xff09;定义模型结构2&#xff09;优化损失函数 3. 模型训练及保存1&#xff09;模型训练2&#xff09;模型保存3&#xff09;映射保存 相关其它博客工程源代码下载其它资料下载…

“百里挑一”AI原生应用亮相,百度智能云千帆AI加速器首个Demo Day来了!

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

亚马逊云科技:向量数据存储在生成式人工智能应用程序中的作用

生成式人工智能深受大众喜爱&#xff0c;并且由于具备回答问题、写故事、创作艺术品甚至生成代码的功能&#xff0c;推动了行业的转变&#xff0c;那么如何才能在自己的企业中充分地利用生成式人工智能等应运而生问题。许多客户已经积累了大量特定领域的数据&#xff08;财务记…

LangChain学习二:提示-实战(下半部分)

文章目录 上一节内容&#xff1a;LangChain学习二&#xff1a;提示-实战&#xff08;上半部分&#xff09;学习目标&#xff1a;提示词中的示例选择器和输出解释器学习内容一&#xff1a;示例选择器1.1 LangChain自定义示例选择器1.2 实现自定义示例选择器1.2.1实战&#xff1a…

静态路由的原理和配置

一.路由器的工作原理 首先我们知道路由器是工作在网络层的&#xff0c;那就是三层设备。网络层的功能主要为&#xff1a;不同网段之间通信、最佳路径选择也就是逻辑地址&#xff08;ip地址&#xff09;寻址、转发数据。 1.路由器是什么 路由器是能将数据包转发到正确的目的地…

【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】

【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码&#xff1a;2、依赖的库&#xff1a;3、文件路径和换行符&#xff1a;4、编译器差异&#xff1a;5、构…

什么是防抖与节流?应用场景举例

防抖节流如何处理防抖与节流 防抖节流防抖例子节流例子Vue Axios全局接口防抖、节流封装实现 小结 防抖 防抖&#xff1a;触发高频事件后n秒内函数只会执行一次&#xff0c;如果n秒内高频事件再次被触发&#xff0c;则重新计算时间 应用场景&#xff1a; 提交按钮、用户注册…

QEMU源码全解析 —— virtio(2)

接前一篇文章&#xff1a; 本文内容参考&#xff1a; 《趣谈Linux操作系统》 —— 刘超&#xff0c;极客时间 《QEMU/KVM》源码解析与应用 —— 李强&#xff0c;机械工业出版社 特此致谢&#xff01; 上一回对于virtio进行了简介&#xff0c;并说明了其基本原理以及框架。对…

【JVM入门到实战】(三) 查看字节码文件的工具

一、 javap -v命令 javap是JDK自带的反编译工具&#xff0c;可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内容。直接输入javap查看所有参数。输入javap -v 字节码文件名称 查看具体的字节码信息。&#xff08;如果jar包需要先使用 jar –xvf 命令解压&a…

mmyolo的bbox_loss和检测bbox都是空

最近用mmyolo训练自己的数据集的时候发现训练的时候loss_bbox0&#xff0c;测试和eval的时候结果也全是空的&#xff0c;排除了数据集读取的问题&#xff0c;最后发现是config中自定义了自己的类别但是没有传给dataset。。。 简而言之&#xff0c;在自定义了数据集里的metainf…

【C语言】一个RDMACM、Verbs API与epoll一起使用的例子

一、epoll介绍 epoll是Linux内核为处理大批量文件描述符而作了改进的poll&#xff0c;是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。 以下是epoll的主要使用方法和优点&#xff1a; epo…

2023-12-05 Qt学习总结10

点击 <C 语言编程核心突破> 快速C语言入门 Qt学习总结 前言二十六 学生信息管理系统插入介绍: QTableView和QSqlTableModelQTableViewQSqlTableModel 程序所用数据库表格程序组成以及界面学生端源码:管理员端源码: 总结 前言 要解决问题: 学习qt最核心知识, 多一个都不…

Android : BottomNavigation底部导航_简单应用

示例图&#xff1a; 1.先创建底部导航需要的图片 res → New → Vector Asset 创建三个矢量图 图片1 baseline_home.xml <vector android:height"24dp" android:tint"#000000"android:viewportHeight"24" android:viewportWidth"24…

nrm 的使用 可以快速切换下载(npm)镜像,解决资源下载慢和运行失败

nrm是什么&#xff1f; 介绍 nrm(npm registry manager) 是 npm 的镜像源管理工具. 有时候国外资源太慢,使用 nrm 可以快速的在 npm 源之间切换 安装 npm install -g nrm 基本使用 查看可选择的源 nrm ls 切换到对应的镜像源 nrm use 对应的镜像 删除镜像源 nrm del 名字 …

深入理解 SVG:开启向量图形的大门(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…