未验证 提交 644f75fc 编写于 作者: LinuxSuRen's avatar LinuxSuRen 提交者: GitHub

Merge pull request #95 from LinuxSuRen/fea/build-job-batch

Add suppor to build a job with params in batch mode
......@@ -12,6 +12,9 @@ import (
type JobBuildOption struct {
BatchOption
Param string
Debug bool
}
var jobBuildOption JobBuildOption
......@@ -19,6 +22,8 @@ var jobBuildOption JobBuildOption
func init() {
jobCmd.AddCommand(jobBuildCmd)
jobBuildCmd.Flags().BoolVarP(&jobBuildOption.Batch, "batch", "b", false, "Batch mode, no need confirm")
jobBuildCmd.Flags().StringVarP(&jobBuildOption.Param, "param", "", "", "Params of the job")
jobBuildCmd.Flags().BoolVarP(&jobBuildOption.Debug, "verbose", "", false, "Output the verbose")
}
var jobBuildCmd = &cobra.Command{
......@@ -33,7 +38,7 @@ var jobBuildCmd = &cobra.Command{
name := args[0]
if !jobBuildOption.Confirm(fmt.Sprintf("Are you sure to build job %s", name)) {
if !jobBuildOption.Batch && !jobBuildOption.Confirm(fmt.Sprintf("Are you sure to build job %s", name)) {
return
}
......@@ -47,8 +52,21 @@ var jobBuildCmd = &cobra.Command{
paramDefs := []client.ParameterDefinition{}
hasParam := false
if job, err := jclient.GetJob(name); err == nil {
if len(job.Property) != 0 {
if jobBuildOption.Batch {
if jobBuildOption.Param != "" {
hasParam = true
if err := json.Unmarshal([]byte(jobBuildOption.Param), &paramDefs); err != nil {
log.Fatal(err)
}
}
} else if job, err := jclient.GetJob(name); err == nil {
proCount := len(job.Property)
if jobBuildOption.Debug {
fmt.Println("Found properties ", proCount)
}
if proCount != 0 {
for _, pro := range job.Property {
if len(pro.ParameterDefinitions) == 0 {
continue
......@@ -76,11 +94,16 @@ var jobBuildCmd = &cobra.Command{
break
}
}
} else {
log.Fatal(err)
}
if hasParam {
jclient.BuildWithParams(name, paramDefs)
} else {
if jobBuildOption.Debug {
fmt.Println("Not params found")
}
jclient.Build(name)
}
},
......
package cmd
import (
"encoding/json"
"fmt"
"log"
"github.com/jenkins-zh/jenkins-cli/client"
"github.com/spf13/cobra"
)
type JobParamOption struct {
OutputOption
Indent bool
}
var jobParamOption JobParamOption
func init() {
jobCmd.AddCommand(jobParamCmd)
jobParamCmd.Flags().BoolVarP(&jobParamOption.Indent, "indent", "", false, "Output with indent")
jobParamOption.SetFlag(jobParamCmd)
}
var jobParamCmd = &cobra.Command{
Use: "param <jobName>",
Short: "Get param of the job of your Jenkins",
Long: `Get param of the job of your Jenkins`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
return
}
name := args[0]
jenkins := getCurrentJenkins()
jclient := &client.JobClient{}
jclient.URL = jenkins.URL
jclient.UserName = jenkins.UserName
jclient.Token = jenkins.Token
jclient.Proxy = jenkins.Proxy
jclient.ProxyAuth = jenkins.ProxyAuth
if job, err := jclient.GetJob(name); err == nil {
proCount := len(job.Property)
if jobBuildOption.Debug {
fmt.Println("Found properties ", proCount)
}
if proCount != 0 {
for _, pro := range job.Property {
if len(pro.ParameterDefinitions) == 0 {
continue
}
if jobParamOption.Indent {
if data, err := json.MarshalIndent(pro.ParameterDefinitions, "", " "); err == nil {
fmt.Println(string(data))
} else {
log.Fatal(err)
}
} else {
if data, err := json.Marshal(pro.ParameterDefinitions); err == nil {
fmt.Println(string(data))
} else {
log.Fatal(err)
}
}
break
}
}
} else {
log.Fatal(err)
}
},
}
......@@ -173,7 +173,10 @@ func (q *JobClient) BuildWithParams(jobName string, parameters []ParameterDefini
if code == 201 { // Jenkins will send redirect by this api
fmt.Println("build successfully")
} else {
log.Fatal(string(data))
fmt.Println("Status code", code)
if q.Debug {
ioutil.WriteFile("debug.html", data, 0664)
}
}
} else {
log.Fatal(err)
......@@ -594,7 +597,7 @@ type ParameterDefinition struct {
type DefaultParameterValue struct {
Description string
Value string
Value interface{}
}
type SimpleJobBuild struct {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册