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

golang连接jenkins构建build

1.安装jenkins依赖

go get github.com/bndr/gojenkins

2.代码

import ("context""file/utils/logs""github.com/bndr/gojenkins""github.com/gin-gonic/gin""net/http""time"
)// 接收单个静态文件上线参数
type ReceiveParametersForDeployingASingleStaticFile struct {StaticFileName string `json:"staticFileName"`BuildJobDate   string `json:"buildjobdate"`
}// 返回给前端数据
type ReturnJenkinsData struct {BuildResult interface{} `json:"buildResult"`BuildLog    interface{} `json:"buildLog"`BuildNumber interface{} `json:"buildNumber"`BuildName   interface{} `json:"buildName"`
}func UpdataSingleStaticFile(r *gin.Context) {//实例化接收参数的结构体var receiveParameters ReceiveParametersForDeployingASingleStaticFilectx := context.Background()//接收前端传递过来的参数error := r.ShouldBindBodyWithJSON(&receiveParameters)if error != nil {logs.Error(map[string]interface{}{"msg": error}, "接收更新参数失败!请检查前端选择的参数是否正确!")r.JSON(http.StatusBadRequest, gin.H{"msg": error})return}//创建jenkins连接jenkins := gojenkins.CreateJenkins(nil, JenkinsUrl, JenkinsUser, JenkinsPass)_, err := jenkins.Init(ctx)if err != nil {logs.Error(map[string]interface{}{"msg": err}, "连接jenkins失败,请检查用户名密码和Url地址是否正确!")r.JSON(http.StatusInternalServerError, gin.H{"msg": err})return}logs.Info(map[string]interface{}{"msg": "连接jenkins成功!"}, "jenkins已连接,更新正在继续!")//创建一个map将参数传递给jenkinsreturnParm := make(map[string]string)returnParm["static_project"] = receiveParameters.StaticFileNamereturnParm["buildJobDate"] = receiveParameters.BuildJobDate//调用jenkins构建job并将参数传递给jenkinsqueueId, buErr := jenkins.BuildJob(ctx, "update-static", returnParm)//fmt.Println(receiveParameters.StaticFileName, "------", receiveParameters.BuildJobDate)if buErr != nil {logs.Error(map[string]interface{}{"msg": "构建失败"}, "请检查配置或者服务是否存在!")r.JSON(http.StatusInternalServerError, gin.H{"msg": buErr})return} else {build, err := jenkins.GetBuildFromQueueID(ctx, queueId)if err != nil {logs.Error(map[string]interface{}{"msg": "获取构建信息失败!"}, "请检查Jenkins信息具体报错位置")r.JSON(http.StatusInternalServerError, gin.H{"msg": err})return}// 等待构建完成for build.IsRunning(ctx) {time.Sleep(5000 * time.Millisecond)build.Poll(ctx)}//fmt.Printf("build number %d with result: %v\n", build.GetBuildNumber(), build.GetResult())returnJenkinsData := ReturnJenkinsData{BuildResult: build.GetResult(),BuildLog:    ctx,BuildNumber: build.GetBuildNumber(),BuildName:   receiveParameters.StaticFileName,}//返回给前端构建结果r.JSON(http.StatusOK,gin.H{"status":  http.StatusOK,"message": "升级成功!","data":    returnJenkinsData,})}
}
http://www.lryc.cn/news/512158.html

相关文章:

  • SCAU高程进阶题(自用)
  • 基于STM32F103控制L298N驱动两相四线步进电机
  • libreoffice在Windows和Linux环境的安装和结合Springboot使用教程
  • 前端开发 -- 自动回复机器人【附完整源码】
  • vue+echarts实现疫情折线图
  • 服务器nfs文件共享
  • 基于Vue+SSM+SpringCloudAlibaba的科目课程管理系统
  • vue3配置caddy作为静态服务器,在浏览器地址栏刷新出现404
  • 深入理解委托:C# 编程中的强大工具
  • 【Java 数据结构】合并两个有序链表
  • 基于微信小程序的校园访客登记系统
  • uniapp 判断多选、选中取消选中的逻辑处理
  • php8.0版本更新了哪些内容
  • Browser Use:AI智能体自动化操作浏览器的开源工具
  • Android笔记(四十):ViewPager2嵌套RecyclerView滑动冲突进一步解决
  • POS系统即销售点系统 文档与数据库设计
  • 安全合规遇 AI 强援:深度驱动行业发展新引擎 | 倍孜网络CEO聂子尧出席ICT深度观察报告会!
  • 算法进阶:贪心算法
  • C++ 设计模式:工厂方法(Factory Method)
  • 手机联系人 查询 添加操作
  • 【LeetCode】2506、统计相似字符串对的数目
  • 金仓数据库对象访问权限的管理
  • Qt 中实现系统主题感知
  • Modbus TCP 报文说明
  • 音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现
  • 大模型:OneFitsAll、Time - LLM、LLaTA
  • 连锁餐饮行业数据可视化分析方案
  • Ubuntu 下使用命令行将 U 盘格式化为 ext4、FAT32 和 exFAT 的详细教程
  • 多说话人ASR的衡量指标和有效计算工具包
  • 英伟达(NVIDIA)