未验证 提交 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 ( ...@@ -12,6 +12,9 @@ import (
type JobBuildOption struct { type JobBuildOption struct {
BatchOption BatchOption
Param string
Debug bool
} }
var jobBuildOption JobBuildOption var jobBuildOption JobBuildOption
...@@ -19,6 +22,8 @@ var jobBuildOption JobBuildOption ...@@ -19,6 +22,8 @@ var jobBuildOption JobBuildOption
func init() { func init() {
jobCmd.AddCommand(jobBuildCmd) jobCmd.AddCommand(jobBuildCmd)
jobBuildCmd.Flags().BoolVarP(&jobBuildOption.Batch, "batch", "b", false, "Batch mode, no need confirm") 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{ var jobBuildCmd = &cobra.Command{
...@@ -33,7 +38,7 @@ var jobBuildCmd = &cobra.Command{ ...@@ -33,7 +38,7 @@ var jobBuildCmd = &cobra.Command{
name := args[0] 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 return
} }
...@@ -47,8 +52,21 @@ var jobBuildCmd = &cobra.Command{ ...@@ -47,8 +52,21 @@ var jobBuildCmd = &cobra.Command{
paramDefs := []client.ParameterDefinition{} paramDefs := []client.ParameterDefinition{}
hasParam := false 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 { for _, pro := range job.Property {
if len(pro.ParameterDefinitions) == 0 { if len(pro.ParameterDefinitions) == 0 {
continue continue
...@@ -76,11 +94,16 @@ var jobBuildCmd = &cobra.Command{ ...@@ -76,11 +94,16 @@ var jobBuildCmd = &cobra.Command{
break break
} }
} }
} else {
log.Fatal(err)
} }
if hasParam { if hasParam {
jclient.BuildWithParams(name, paramDefs) jclient.BuildWithParams(name, paramDefs)
} else { } else {
if jobBuildOption.Debug {
fmt.Println("Not params found")
}
jclient.Build(name) 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 ...@@ -173,7 +173,10 @@ func (q *JobClient) BuildWithParams(jobName string, parameters []ParameterDefini
if code == 201 { // Jenkins will send redirect by this api if code == 201 { // Jenkins will send redirect by this api
fmt.Println("build successfully") fmt.Println("build successfully")
} else { } else {
log.Fatal(string(data)) fmt.Println("Status code", code)
if q.Debug {
ioutil.WriteFile("debug.html", data, 0664)
}
} }
} else { } else {
log.Fatal(err) log.Fatal(err)
...@@ -594,7 +597,7 @@ type ParameterDefinition struct { ...@@ -594,7 +597,7 @@ type ParameterDefinition struct {
type DefaultParameterValue struct { type DefaultParameterValue struct {
Description string Description string
Value string Value interface{}
} }
type SimpleJobBuild struct { type SimpleJobBuild struct {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册