Go语言restyhttp包调用jenkinsapi实例_第1页
Go语言restyhttp包调用jenkinsapi实例_第2页
Go语言restyhttp包调用jenkinsapi实例_第3页
Go语言restyhttp包调用jenkinsapi实例_第4页
Go语言restyhttp包调用jenkinsapi实例_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第Go语言restyhttp包调用jenkinsapi实例目录前言Resty特色演示例子简单get请求增强get请求灵活post请求多文件上传文件下载实战例子构造一个jenkins客户端获取jenkinsjob信息无参构建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官网:/go-resty/resty

演示例子

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

简单get请求

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

funcsimpleGet(){

client:=resty.New()

resp,_:=client.R().EnableTrace().Get("/get")

fmt.Println("状态码:",resp.StatusCode())

fmt.Println("总耗时:",resp.Time())

增强get请求

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

funcenhancedGet(){

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=232amp;template=fresh-sampleamp;cat=restyamp;source=googleamp;kw=buyalotmore").

SetHeader("Accept","application/json").

SetAuthToken("xxxxxxxxxxxxxxxxxxxxxxx").

Get("/search_result")

fmt.Println(resp)

灵活post请求

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

funcvariousPost(){

client:=resty.New()

resp,err:=client.R().

SetBody(map[string]interface{}{"username":"testuser","password":"testpass"}).

SetAuthToken("your-auth-token").

Post("/login")

fmt.Println(resp,err)

多文件上传

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

funcmultipartFileUpload(){

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("/upload")

fmt.Println(resp)

文件下载

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

funcdownFile(){

client:=resty.New()

_,_=client.R().

SetOutput("plugin/test-v5.1-beta.zip").

Get("http://my.app/test")

实战例子

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

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

构造一个jenkins客户端

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

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

funcjenkinsClient()*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")

returna

var(

url="http://ip:port"

获取jenkinsjob信息

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

typeJobInfostruct{

DisplayNamestring

FullNamestring

Buildablebool

NextBuildNumberint

InQueuebool

Colorstring//blue成功red失败

Urlstring

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

funcjenkinsJobInfo(jobstring){

a:=jenkinsClient()

jobInfo:=amp;JobInfo{}

resp,err:=a.SetResult(jobInfo).Get(url+"/job/"+job+"/api/json")

iferr!=nil{

fmt.Println(err)

fmt.Println("resp\n",resp.StatusCode(),resp.Time())

fmt.Println(jobInfo.Color)

无参构建job

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

funcjenkinsJobBuild(jobstring){

a:=jenkinsClient()

resp,_:=a.Post(url+"/job/"+job+"/build")

ifresp.StatusCode()==201{

fmt.Println("build成功")

查看构建日志

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

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

funcjenkinsJobLog(jobstring){

a:=jenkinsClient()

resp,_:=a.Get(url+"/job/"+job+"/lastBuild/buildNumber")

ifresp.StatusCode()==200{

lastBuild:=resp.String()

resp2,_:=a.Get(url+"/job/"+job+"/"+lastBuild+"/logText/progressiveText")

fmt.Println(resp2.String())

job开关(启用禁用job)

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

funcjenkinsJobSwich(jobstring,swibool){

a:=jenkinsClient()

ifswi{

resp,_:=a.Post(url+"/job/"+job+"/enable")

fmt.Println(resp.Status())

}else{

resp,_:=a.Post(url+"/job/"+job+"/disabl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论