From a7c6b81621f577d425f23b44a374df172749767b Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Sat, 5 Oct 2024 20:25:01 +0800 Subject: [PATCH] feat: support parameter handling for dynamic URL paths (#35) - Comment out unused form data encoding in `post` method - Remove redundant error logging in `post` method - Add conditional URL path selection in `trigger` method based on parameters - Add `parameter` flag to CLI options in `main.go` - Include `parameter` in the `run` function configuration - Import `net/url` package in `plugin.go` - Add `Parameter` field to `plugin.go` struct - Parse and add parameters to URL values in `Exec` method - Pass parsed parameters to `trigger` method in `Exec` function Signed-off-by: appleboy --- jenkins.go | 12 ++++++++---- main.go | 16 +++++++++++----- plugin.go | 22 ++++++++++++++++------ 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/jenkins.go b/jenkins.go index 512de37..91c536b 100644 --- a/jenkins.go +++ b/jenkins.go @@ -81,15 +81,14 @@ func (jenkins *Jenkins) parseResponse(resp *http.Response, body interface{}) (er func (jenkins *Jenkins) post(path string, params url.Values, body interface{}) (err error) { requestURL := jenkins.buildURL(path, params) + // formData := params.Encode() req, err := http.NewRequest("POST", requestURL, nil) if err != nil { - fmt.Println(err) return } resp, err := jenkins.sendRequest(req) if err != nil { - fmt.Println(err) return } @@ -118,7 +117,12 @@ func (jenkins *Jenkins) parseJobPath(job string) string { } func (jenkins *Jenkins) trigger(job string, params url.Values) error { - path := jenkins.parseJobPath(job) + "/build" + var urlPath string + if len(params) == 0 { + urlPath = jenkins.parseJobPath(job) + "/build" + } else { + urlPath = jenkins.parseJobPath(job) + "/buildWithParameters" + } - return jenkins.post(path, params, nil) + return jenkins.post(urlPath, params, nil) } diff --git a/main.go b/main.go index 40b17fd..c77e809 100644 --- a/main.go +++ b/main.go @@ -59,6 +59,11 @@ func main() { Usage: "allow insecure server connections when using SSL", EnvVar: "PLUGIN_INSECURE,JENKINS_INSECURE,INPUT_INSECURE", }, + cli.StringSliceFlag{ + Name: "parameter,p", + Usage: "jenkins build parameter", + EnvVar: "PLUGIN_PARAMETER,JENKINS_PARAMETER,INPUT_PARAMETER", + }, } // Override a template @@ -101,11 +106,12 @@ REPOSITORY: func run(c *cli.Context) error { plugin := Plugin{ - BaseURL: c.String("host"), - Username: c.String("user"), - Token: c.String("token"), - Job: c.StringSlice("job"), - Insecure: c.Bool("insecure"), + BaseURL: c.String("host"), + Username: c.String("user"), + Token: c.String("token"), + Job: c.StringSlice("job"), + Insecure: c.Bool("insecure"), + Parameter: c.StringSlice("parameter"), } return plugin.Exec() diff --git a/plugin.go b/plugin.go index ebdd4f4..f2b8caa 100644 --- a/plugin.go +++ b/plugin.go @@ -3,17 +3,19 @@ package main import ( "errors" "log" + "net/url" "strings" ) type ( // Plugin values. Plugin struct { - BaseURL string - Username string - Token string - Job []string - Insecure bool + BaseURL string + Username string + Token string + Job []string + Insecure bool + Parameter []string } ) @@ -50,8 +52,16 @@ func (p Plugin) Exec() error { jenkins := NewJenkins(auth, p.BaseURL, p.Insecure) + params := url.Values{} + for _, v := range p.Parameter { + kv := strings.Split(v, "=") + if len(kv) == 2 { + params.Add(kv[0], kv[1]) + } + } + for _, v := range jobs { - if err := jenkins.trigger(v, nil); err != nil { + if err := jenkins.trigger(v, params); err != nil { return err } log.Printf("trigger job %s success", v)