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

Merge pull request #43 from LinuxSuRen/fea/create-folder

Add support to create and delete a job
package cmd
import (
"log"
"github.com/AlecAivazis/survey"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
)
type JobCreateOption struct {
}
var jobCreateOption JobCreateOption
func init() {
jobCmd.AddCommand(jobCreateCmd)
}
var jobCreateCmd = &cobra.Command{
Use: "create <jobName>",
Short: "Create a job in your Jenkins",
Long: `Create a job in your Jenkins`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
return
}
jobName := 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
types := make(map[string]string)
if categories, err := jclient.GetJobTypeCategories(); err == nil {
for _, category := range categories {
for _, item := range category.Items {
types[item.DisplayName] = item.Class
}
}
}
typesArray := make([]string, 0)
for tp := range types {
typesArray = append(typesArray, tp)
}
var jobType string
prompt := &survey.Select{
Message: "Choose a job type:",
Options: typesArray,
Default: jobType,
}
survey.AskOne(prompt, &jobType)
if err := jclient.Create(jobName, types[jobType]); err != nil {
log.Fatal(err)
}
},
}
package cmd
import (
"log"
"github.com/linuxsuren/jenkins-cli/client"
"github.com/spf13/cobra"
)
type JobDeleteOption struct {
}
var jobDeleteOption JobDeleteOption
func init() {
jobCmd.AddCommand(jobDeleteCmd)
}
var jobDeleteCmd = &cobra.Command{
Use: "delete <jobName>",
Short: "Delete a job in your Jenkins",
Long: `Delete a job in your Jenkins`,
Run: func(cmd *cobra.Command, args []string) {
if len(args) == 0 {
cmd.Help()
return
}
jobName := 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 err := jclient.Delete(jobName); err != nil {
log.Fatal(err)
}
},
}
......@@ -18,7 +18,7 @@ var jobTypeOption JobTypeOption
func init() {
jobCmd.AddCommand(jobTypeCmd)
jobTypeCmd.Flags().StringVarP(&jobTypeOption.Format, "output", "o", "json", "Format the output")
jobTypeCmd.Flags().StringVarP(&jobTypeOption.Format, "output", "o", "table", "Format the output")
}
var jobTypeCmd = &cobra.Command{
......
......@@ -270,7 +270,6 @@ func (q *JobClient) UpdatePipeline(name, script string) (err error) {
response *http.Response
)
fmt.Println(api)
formData := url.Values{"script": {script}}
payload := strings.NewReader(formData.Encode())
req, err = http.NewRequest("POST", api, payload)
......@@ -401,6 +400,91 @@ func (q *JobClient) Log(jobName string, history int, start int64) (jobLog JobLog
return
}
func (q *JobClient) Create(jobName string, jobType string) (err error) {
api := fmt.Sprintf("%s/view/all/createItem", q.URL)
var (
req *http.Request
response *http.Response
)
type playLoad struct {
Name string `json:"name"`
Mode string `json:"mode"`
From string
}
playLoadObj := &playLoad{
Name: jobName,
Mode: jobType,
From: "",
}
playLoadData, _ := json.Marshal(playLoadObj)
formData := url.Values{
"json": {string(playLoadData)},
"name": {jobName},
"mode": {jobType},
}
payload := strings.NewReader(formData.Encode())
req, err = http.NewRequest("POST", api, payload)
if err == nil {
q.AuthHandle(req)
} else {
return
}
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
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 == 302 || code == 200 { // Jenkins will send redirect by this api
fmt.Println("create successfully")
} else {
fmt.Printf("status code: %d\n", code)
log.Fatal(string(data))
}
} else {
log.Fatal(err)
}
return
}
func (q *JobClient) Delete(jobName string) (err error) {
api := fmt.Sprintf("%s/job/%s/doDelete", q.URL, jobName)
var (
req *http.Request
response *http.Response
)
req, err = http.NewRequest("POST", api, nil)
if err == nil {
q.AuthHandle(req)
} else {
return
}
req.Header.Add("Content-Type", "application/x-www-form-urlencoded")
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 == 302 || code == 200 { // Jenkins will send redirect by this api
fmt.Println("delete successfully")
} else {
fmt.Printf("status code: %d\n", code)
log.Fatal(string(data))
}
} else {
log.Fatal(err)
}
return
}
type JobLog struct {
HasMore bool
NextStart int64
......@@ -485,4 +569,5 @@ type JobCategoryItem struct {
Description string
DisplayName string
Order int
Class string
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册