未验证 提交 b5634f07 编写于 作者: Z Zhao Xiaojie 提交者: GitHub

Merge pull request #42 from LinuxSuRen/fea/list-types

Add support to list the types of job
package cmd
import (
"fmt"
"log"
"os"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/linuxsuren/jenkins-cli/util"
"github.com/spf13/cobra"
)
type JobTypeOption struct {
OutputOption
}
var jobTypeOption JobTypeOption
func init() {
jobCmd.AddCommand(jobTypeCmd)
jobTypeCmd.Flags().StringVarP(&jobTypeOption.Format, "output", "o", "json", "Format the output")
}
var jobTypeCmd = &cobra.Command{
Use: "type",
Short: "Print the types of job which in your Jenkins",
Long: `Print the types of job which in your Jenkins`,
Run: func(cmd *cobra.Command, args []string) {
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 status, err := jclient.GetJobTypeCategories(); err == nil {
var data []byte
if data, err = jobTypeOption.Output(status); err == nil {
if len(data) > 0 {
fmt.Printf("%s\n", string(data))
}
} else {
log.Fatal(err)
}
} else {
log.Fatal(err)
}
},
}
func (o *JobTypeOption) Output(obj interface{}) (data []byte, err error) {
if data, err = o.OutputOption.Output(obj); err != nil {
jobCategories := obj.([]client.JobCategory)
table := util.CreateTable(os.Stdout)
table.AddRow("number", "name", "type")
for _, jobCategory := range jobCategories {
for i, item := range jobCategory.Items {
table.AddRow(fmt.Sprintf("%d", i), item.DisplayName,
jobCategory.Name)
}
}
table.Render()
err = nil
data = []byte{}
}
return
}
......@@ -218,6 +218,41 @@ func (q *JobClient) GetJob(name string) (job *Job, err error) {
return
}
func (q *JobClient) GetJobTypeCategories() (jobCategories []JobCategory, err error) {
api := fmt.Sprintf("%s/view/all/itemCategories?depth=3", q.URL)
var (
req *http.Request
response *http.Response
)
req, err = http.NewRequest("GET", api, nil)
if err == nil {
q.AuthHandle(req)
} else {
return
}
client := q.GetClient()
if response, err = client.Do(req); err == nil {
code := response.StatusCode
var data []byte
data, err = ioutil.ReadAll(response.Body)
if code == 200 {
type innerJobCategories struct {
Categories []JobCategory
}
result := &innerJobCategories{}
err = json.Unmarshal(data, result)
jobCategories = result.Categories
} else {
log.Fatal(string(data))
}
} else {
log.Fatal(err)
}
return
}
func (q *JobClient) UpdatePipeline(name, script string) (err error) {
jobItems := strings.Split(name, " ")
path := ""
......@@ -436,3 +471,18 @@ type Pipeline struct {
Script string
Sandbox bool
}
type JobCategory struct {
Description string
ID string
Items []JobCategoryItem
MinToShow int
Name string
Order int
}
type JobCategoryItem struct {
Description string
DisplayName string
Order int
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册