直接上代码:
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)
}