golang实现jenkins rest api rebuildwithparameters功能

直接上代码:

package main

import (
	"encoding/json"
	"fmt"
	"github.com/tidwall/gjson"
	"io/ioutil"
	"net/http"
	"strings"
)

type BaseInfo struct {
	Baseurl string
	Username string
	Password string
}

func getparas(jobname string, info *BaseInfo) map[string]string {
	var infom map[string]string
	bij, _ := json.Marshal(info)
	json.Unmarshal(bij,&infom)
	jobarr := strings.Split(jobname, "/")
	newjobname := strings.Join(jobarr,"/job/")
	func_url := "/lastBuild/api/json"
	aurl := infom["Baseurl"] + "/job/" + newjobname + func_url

	req, err := http.NewRequest("GET", aurl, nil)
	if err != nil {
		panic(err.Error())
	}
	req.Header.Set("Content-Type", "application/json")
	req.SetBasicAuth(infom["Username"], infom["Password"])
	resp, err := http.DefaultClient.Do(req)
	result, _ := ioutil.ReadAll(resp.Body)
	defer resp.Body.Close()
	datastr := string(result)
	parr := gjson.Get(datastr, "actions.0.parameters")
	fin := make(map[string]string)
	for _, v := range parr.Array() {
		aret := v.String()
		ks := gjson.Get(aret,"name").String()
		vs := gjson.Get(aret,"value").String()
		fin[ks] = vs
	}
	return fin
}

func buildwithpatameters(jobname string,info *BaseInfo,paras map[string]string) {
	var infom map[string]string
	bij, _ := json.Marshal(info)
	json.Unmarshal(bij,&infom)
	crumb_url := infom["Baseurl"] + "/crumbIssuer/api/json"
	creq, err := http.NewRequest("GET", crumb_url, nil)
	creq.Header.Set("Content-Type", "application/json")
	creq.SetBasicAuth(infom["Username"], infom["Password"])
	cresp, err := http.DefaultClient.Do(creq)
	result, _ := ioutil.ReadAll(cresp.Body)
	ccookie := cresp.Header.Get("set-cookie")
	datastr := string(result)
	crumbn := gjson.Get(datastr, "crumbRequestField").String()
	crumbv := gjson.Get(datastr, "crumb").String()
	cresp.Body.Close()

	jobarr := strings.Split(jobname, "/")
	newjobname := strings.Join(jobarr,"/job/")
	parastr := ""
	for ks, vs := range paras {
		parastr += ks + "=" + vs
		parastr += "&"
	}
	parastr = parastr[:len(parastr)-1]
	func_url := "/buildWithParameters?" + parastr
	aurl := infom["Baseurl"] + "/job/" + newjobname + func_url
	req, err := http.NewRequest("POST", aurl, nil)
	req.Header.Set("Content-Type", "application/json")
	req.SetBasicAuth(infom["Username"],infom["Password"])
	req.Header.Set(crumbn, crumbv)
	req.Header.Set("Cookie", ccookie)
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err.Error())
	}
	defer resp.Body.Close()
	body,err := ioutil.ReadAll(resp.Body)
	fmt.Printf(string(body))
}
func test(info *BaseInfo)  {
	inf := map[string]string{}
	do, _ := json.Marshal(info)
	json.Unmarshal(do,&inf)
	fmt.Println(inf["Username"])
}

func main() {
	jobname := "test/para_test"
	bi := &BaseInfo{Baseurl: "http://192.168.25.16:8080", Username: "adc", Password: "123456"}

	paras := getparas(jobname, bi)
	buildwithpatameters(jobname, bi, paras)
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值