Go语言restyhttp包调用jenkinsapi实例

Dolly ·
更新时间:2024-09-20
· 915 次阅读

目录

前言

Resty特色

演示例子

简单get请求

增强get请求

灵活post请求

多文件上传

文件下载

实战例子

构造一个jenkins客户端

获取jenkins job信息

无参构建job

查看构建日志

job开关(启用禁用job)

小结

前言

在前两篇文章中都使用HttpRequest这个http包来做api的请求

然后github上面还有一个更有名,星星更多,社区也更活跃的http包Resty

最近11月3号又发布了一个新版本,项目参与者多达75个,标星有5.2k

Resty特色

支持GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS等方法

设置和请求的方法简单

请求体支持多种数据类型(string,[]byte,struct,map,slice,io.Reader)

返回支持[]byte和string

对json和xml内容自动编码和解码

支持上传一个多个文件和下载指定路径或打包

请求参数支持QueryParams,QueryString,FormData

支持重试,代理,证书

支持简单认证和认证token

Resty官网: https://github.com/go-resty/resty

演示例子

演示部分例子get,post等例子,其它put,delete,patch都差不多

简单get请求

该示例显示请求状态和响应耗时

func simpleGet() { client := resty.New() resp, _ := client.R().EnableTrace().Get("https://httpbin.org/get") fmt.Println("状态码:", resp.StatusCode()) fmt.Println("总耗时:", resp.Time()) } 增强get请求

该示例支持map类型和路径参数,支持设置请求头和认证token

func enhancedGet() { client := resty.New() resp, _ := client.R(). SetQueryParams(map[string]string{ "page_no": "1", "limit": "20", "sort": "name", "order": "asc", "random": strconv.FormatInt(time.Now().Unix(), 10), }). //SetQueryString("productId=232&template=fresh-sample&cat=resty&source=google&kw=buy a lot more"). SetHeader("Accept", "application/json"). SetAuthToken("xxxxxxxxxxxxxxxxxxxxxxx"). Get("/search_result") fmt.Println(resp) } 灵活post请求

该示例支持设置body内容为map支持简单认证和token认证

func variousPost() { client := resty.New() resp, err := client.R(). SetBody(map[string]interface{}{"username": "testuser", "password": "testpass"}). SetAuthToken("<your-auth-token>"). Post("https://myapp.com/login") fmt.Println(resp, err) } 多文件上传

该示例支持多文件上传,支持定义本地文件路径,支持设置FormData数据

func multipartFileUpload() { profileImgBytes, _ := ioutil.ReadFile("/Users/jeeva/test-img.png") notesBytes, _ := ioutil.ReadFile("/Users/jeeva/text-file.txt") client := resty.New() resp, _ := client.R(). SetFileReader("profile_img", "test-img.png", bytes.NewReader(profileImgBytes)). SetFileReader("notes", "text-file.txt", bytes.NewReader(notesBytes)). SetFormData(map[string]string{ "first_name": "dddd", "last_name": "cccc", }). Post("http://myapp.com/upload") fmt.Println(resp) } 文件下载

定义下载保存路径,直接下载

func downFile() { client := resty.New() _, _ = client.R(). SetOutput("plugin/test-v5.1-beta.zip"). Get("http://my.app/test") } 实战例子

通过上面的演示例子,可以看到resty这个包功能非常强大

接下来我们使用该包来封装jenkins api,来进行二次开发

构造一个jenkins客户端

编写一个方法创建jenkins客户端,后续所有动作只需调用既可

该客户端集成了重试,json头,以及简单认证

func jenkinsClient() *resty.Request { c := resty.New() a := c.SetRetryCount(3).SetRetryWaitTime(5 * time.Second). SetRetryMaxWaitTime(20 * time.Second). R().SetHeader("Accept", "application/json"). SetBasicAuth("username", "password") return a } var ( url = "http://ip:port" ) 获取jenkins job信息

创建好jobinfo的结构体,方便接下来的数据接收

type JobInfo struct { DisplayName string FullName string Buildable bool NextBuildNumber int InQueue bool Color string //blue成功 red失败 Url string }

resty会将返回数据解码,只需要提供结构体接收

func jenkinsJobInfo(job string) { a := jenkinsClient() jobInfo := &JobInfo{} resp, err := a.SetResult(jobInfo).Get(url + "/job/" + job + "/api/json") if err != nil { fmt.Println(err) } fmt.Println("resp\n", resp.StatusCode(), resp.Time()) fmt.Println(jobInfo.Color) } 无参构建job

简单post请求,调用无参数构建

func jenkinsJobBuild(job string) { a := jenkinsClient() resp, _ := a.Post(url+"/job/"+job+"/build") if resp.StatusCode() == 201 { fmt.Println("build 成功") } } 查看构建日志

查看日志,需要先获取job的最后一次的buildID

所以这里发请2次请求,第1次获取buildID,第2次获取日志内容

func jenkinsJobLog(job string) { a := jenkinsClient() resp, _ := a.Get(url + "/job/" + job + "/lastBuild/buildNumber") if resp.StatusCode() == 200 { lastBuild := resp.String() resp2, _ := a.Get(url + "/job/" + job + "/" + lastBuild + "/logText/progressiveText") fmt.Println(resp2.String()) } } job开关(启用禁用job)

第一个参数为job名称,第二个参数设定开关值

func jenkinsJobSwich(job string,swi bool) { a := jenkinsClient() if swi { resp, _ := a.Post(url + "/job/" + job + "/enable") fmt.Println(resp.Status()) } else { resp, _ := a.Post(url + "/job/" + job + "/disable") fmt.Println(resp.Status()) } } 小结

通过实战可以发现,在没有第三方sdk的时候,完全是可以自已通过使用http包,来进行http api项目的二次开发或封装

而resty则是Go http包中的王者

以上就是Go语言resty http包调用jenkins api实例的详细内容,更多关于Go resty http包调用jenkins api的资料请关注软件开发网其它相关文章!



GO

需要 登录 后方可回复, 如果你还没有账号请 注册新账号