func (this *ProjectEnvironmentController) PublishPreApi() { //projectenvid := this.Input().Get("projectenvid") envid := this.Input().Get("envid") rundeckbuildjobid := this.Input().Get("rundeckbuildjobid") // rundeckpackagejobid := this.Input().Get("rundeckpackagejobid") projectid := this.Input().Get("projectid") buildnumber := this.Input().Get("buildnumber") o := orm.NewOrm() var project models.Projectinfo o.QueryTable("Projectinfo").Filter("Id", projectid).One(&project) var preenv models.Environmentinfo o.QueryTable("Environmentinfo").Filter("id", envid).One(&preenv) var projectbuild models.Projectbuild o.QueryTable("Projectbuild").Filter("projectid", projectid).Filter("BuildNumber", buildnumber).One(&projectbuild) var localenv models.Environmentinfo o.QueryTable("Environmentinfo").Filter("id", projectbuild.Envid).One(&localenv) var localprojectenv models.Projectenvironment o.QueryTable("Projectenvironment").Filter("Projectid", projectid).Filter("Envid", projectbuild.Envid).One(&localprojectenv) //打包操作 args := map[string]string{"BUILD_NUMBER": buildnumber, "Repository_Path": project.Repositorypath} response := utility.RundeckRunJob(localenv.Rundeckapiurl, localenv.Rundeckapiauthtoken, localprojectenv.Rundeckpackagejobid, args) fmt.Println(response) //parse rundeck api xml response r := models.RunJobExecutions{} xml_err := xml.Unmarshal([]byte(response), &r) if xml_err != nil { fmt.Printf("error: %v", xml_err) this.Data["json"] = xml_err //url.QueryEscape(logs[0].Packagepath) this.ServeJson() } //status_r := models.RunJobExecutions{} for i := 0; i < 1; { status_r := models.RunJobExecutions{} status_response := utility.RundeckExecutionInfo(localenv.Rundeckapiurl, localenv.Rundeckapiauthtoken, r.Exs[0].Id) status_xml_err := xml.Unmarshal([]byte(status_response), &status_r) if status_xml_err != nil { fmt.Printf("error: %v", status_xml_err) this.Data["json"] = status_xml_err this.ServeJson() } if status_r.Exs[0].Status == "succeeded" { i = 1 } else { fmt.Println(status_r.Exs[0].Status) } time.Sleep(time.Second * 3) } //调用预上线环境rundeck pre_args := map[string]string{"url": project.Repositoryurl + buildnumber + "/pre/" + project.Packagefilename} prejob_response := utility.RundeckRunJob(preenv.Rundeckapiurl, preenv.Rundeckapiauthtoken, rundeckbuildjobid, pre_args) fmt.Println(prejob_response) //parse rundeck api xml response pre_r := models.RunJobExecutions{} pre_xml_err := xml.Unmarshal([]byte(prejob_response), &pre_r) if pre_xml_err != nil { fmt.Printf("error: %v", pre_xml_err) this.Data["json"] = pre_xml_err //url.QueryEscape(logs[0].Packagepath) this.ServeJson() } /* fmt.Println(projectenvid) fmt.Println(envid) fmt.Println(rundeckbuildjobid) fmt.Println(rundeckpackagejobid) fmt.Println(projectid) fmt.Println(buildnumber) */ this.Data["json"] = models.BuildApiModel{models.JsonResultBaseStruct{Result: true, Message: "操作成功"}, pre_r.Exs[0].Id} //status_r.Exs[0].Id} this.ServeJson() }
func (this *TestController) Rundeck() { /* var data = []byte(`<executions count='1'> <execution id='1081' href='http://192.168.50.20:4440/execution/follow/1081' status='running' project='CI'> <user>admin</user> <date-started unixtime='1441462368695'>2015-09-05T14:12:48Z</date-started> <job id='305afa2d-82eb-435d-88ee-2b1d12b353cb' averageDuration='24812'> <name>Config-Web</name> <group>Go</group> <project>CI</project> <description></description> </job> <description>#!/bin/bash pwd export GOROOT=/opt/go/go export GOPATH=/home/mtimegit/go export PATH=$PATH:/opt/go/go/bin:/home/mtimegit/go/bin sh contract.sh echo @option.JOB_NAME@ /home/mtimegit/go/bin/config-web/config-web -s quit /home/mtimegit/go/bin/mtimewall-service/mtimewall-service -s quit /home/mtimegit/go/bin/captcha-service/captcha-service -s quit rm -rf /home/mtimegit/go/src/mtime.com/basis git clone -b @option.Branch_NAME@ [email protected]:go/basis /home/mtimegit/go/src/mtime.com/basis gobuild -v mtime.com/basis/config-web status=$? echo "gobuild command exit stats - $status" if [ $status -gt 0 ] then echo fail exit 1 fi #输出git分支名和Hash值 cd /home/mtimegit/go/src/mtime.com/basis git rev-parse --abbrev-ref HEAD > /home/mtimegit/go/bin/config-web/GitBranchName git rev-parse HEAD > /home/mtimegit/go/bin/config-web/GitBranchHash /home/mtimegit/go/bin/config-web/config-web #将原始程序部署到公共目录 rm -rf /mnt/025/MtimeGoConfigWeb/@option.BUILD_NUMBER@ mkdir /mnt/025/MtimeGoConfigWeb/@option.BUILD_NUMBER@ cp -r /home/mtimegit/go/bin/config-web /mnt/025/MtimeGoConfigWeb/@option.BUILD_NUMBER@/ gobuild -v mtime.com/basis/mtimewall-service if [ $? -gt 0 ] then echo fail exit 1 fi /home/mtimegit/go/bin/mtimewall-service/mtimewall-service gobuild -v mtime.com/basis/captcha-service if [ $? -gt 0 ] then echo fail exit 1 fi /home/mtimegit/go/bin/captcha-service/captcha-service</description> <argstring /> </execution> </executions>`) */ o := orm.NewOrm() var logs []*models.Executionlog num, err := o.QueryTable("Executionlog").Filter("id", 1).All(&logs) fmt.Printf("Returned Rows Num: %s, %s", num, err) args := map[string]string{"BUILD_NUMBER": "10", "Branch_NAME": "develop"} response := utility.RundeckRunJob("http://192.168.50.20:4440/api/13/", "E4rNvVRV378knO9dp3d73O0cs1kd0kCd", "305afa2d-82eb-435d-88ee-2b1d12b353cb", args) fmt.Println(response) r := models.RunJobExecutions{} xml_err := xml.Unmarshal([]byte(response), &r) if xml_err != nil { fmt.Printf("error: %v", xml_err) this.Data["json"] = xml_err //url.QueryEscape(logs[0].Packagepath) this.ServeJson() } if r.Exs != nil { fmt.Println(r.Exs[0].Id) } fmt.Println(r) i := 0 for i < 1 { r2 := models.RunJobExecutions{} response_2 := utility.RundeckExecutionInfo("http://192.168.50.20:4440/api/13/", "E4rNvVRV378knO9dp3d73O0cs1kd0kCd", r.Exs[0].Id) xml_err2 := xml.Unmarshal([]byte(response_2), &r2) if xml_err2 != nil { fmt.Printf("error: %v", xml_err2) this.Data["json"] = xml_err2 //url.QueryEscape(logs[0].Packagepath) this.ServeJson() } if r2.Exs != nil { fmt.Println(r.Exs[0].Id) } fmt.Println(r2) if r2.Exs[0].Status == "succeeded" { i = 1 } time.Sleep(time.Second * 3) } /* client := &http.Client{} //reqest, _ := http.NewRequest("GET", "http://10.10.130.221:4440/api/13/job/30eb1ae2-540b-4cff-bcad-976762bc33d2/run?authtoken=E4rNvVRV378knO9dp3d73O0cs1kd0kCd&argString=-url+http%3A%2F%2F192.168.0.25%3A6666%2FMtimeGoConfigWeb%2F20150805164616%2Fconfig-web.tar.gz", nil) reqest, _ := http.NewRequest("GET", "http://10.10.130.221:4440/api/13/job/30eb1ae2-540b-4cff-bcad-976762bc33d2/run?authtoken=E4rNvVRV378knO9dp3d73O0cs1kd0kCd&argString=-url+"+url.QueryEscape(logs[0].Packagepath), nil) //reqest.Header.Set("Connection", "keep-alive") resp, err := client.Do(reqest) //resp, err := http.Get("http://api.m.mtime.cn/PageSubArea/HotPlayMovies.api?locationId=290") //req.Header.Add("If-None-Match", `W/"wyzzy"`) if err != nil { //handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) */ this.Data["json"] = r //url.QueryEscape(logs[0].Packagepath) this.ServeJson() //this.Data["Website"] = "beego.me" //+ string(body) //this.Data["Email"] = "*****@*****.**" //this.TplNames = "index.tpl" }
func (this *ProjectEnvironmentController) BuildApi() { //projectenvid := this.Input().Get("projectenvid") envid := this.Input().Get("envid") intenvid, _ := strconv.Atoi(envid) rundeckbuildjobid := this.Input().Get("rundeckbuildjobid") //rundeckpackagejobid := this.Input().Get("rundeckpackagejobid") projectid := this.Input().Get("projectid") branchname := this.Input().Get("branchname") o := orm.NewOrm() //添加版本号数据以及更新项目版本号 var project models.Projectinfo o.QueryTable("Projectinfo").Filter("Id", projectid).Update(orm.Params{ "BuildNumber": orm.ColValue(orm.Col_Add, 1), }) o.QueryTable("Projectinfo").Filter("Id", projectid).One(&project) now := time.Now() fmt.Println(now) var pb models.Projectbuild pb.Projectid = project.Id pb.Buildnumber = project.Buildnumber pb.Branchname = branchname pb.Created = now pb.Buildstatus = 1 pb.Envid = intenvid id, _ := o.Insert(&pb) //获取项目环境信息进行编译部署 var env models.Environmentinfo o.QueryTable("Environmentinfo").Filter("id", envid).One(&env) args := map[string]string{"BUILD_NUMBER": strconv.Itoa(project.Buildnumber), "Branch_NAME": branchname, "Repository_Path": project.Repositorypath} response := utility.RundeckRunJob(env.Rundeckapiurl, env.Rundeckapiauthtoken, rundeckbuildjobid, args) fmt.Println(response) //parse rundeck api xml response r := models.RunJobExecutions{} xml_err := xml.Unmarshal([]byte(response), &r) if xml_err != nil { fmt.Printf("error: %v", xml_err) this.Data["json"] = xml_err //url.QueryEscape(logs[0].Packagepath) this.ServeJson() } if r.Exs != nil { o.QueryTable("Projectbuild").Filter("Id", id).Update(orm.Params{ "BuildStatus": 2, "ExecutionId": r.Exs[0].Id, }) fmt.Println(r.Exs[0].Id) } //rundeck执行完成之后读取git hash dat, _ := ioutil.ReadFile("/Volumes/ftproot/mtime/upversion/MtimeGoConfigWeb/2/config-web/GitBranchHash") //check(err) fmt.Print(string(dat)) o.QueryTable("Projectbuild").Filter("Id", id).Update(orm.Params{ "BranchHash": string(dat), }) //fmt.Println(response) //fmt.Println(projectenvid) //fmt.Println(envid) //fmt.Println(rundeckbuildjobid) //fmt.Println(rundeckpackagejobid) //fmt.Println(projectid) //fmt.Println(branchname) this.Data["json"] = models.BuildApiModel{models.JsonResultBaseStruct{Result: true, Message: "操作成功"}, r.Exs[0].Id} this.ServeJson() }