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

Add support to load a jenkinsfile from url (#220)

* Add support to load a jenkinsfile from url

* Add more test cases
上级 301b0a66
......@@ -13,6 +13,7 @@ import (
type JobEditOption struct {
Filename string
Script string
URL string
RoundTripper http.RoundTripper
}
......@@ -21,6 +22,8 @@ var jobEditOption JobEditOption
func init() {
jobCmd.AddCommand(jobEditCmd)
jobEditCmd.Flags().StringVarP(&jobEditOption.URL, "url", "", "",
"URL of the Jenkinsfile to files to use to replace pipeline")
jobEditCmd.Flags().StringVarP(&jobEditOption.Filename, "filename", "f", "",
"Filename to files to use to replace pipeline")
jobEditCmd.Flags().StringVarP(&jobEditOption.Script, "script", "s", "",
......@@ -67,6 +70,10 @@ func (j *JobEditOption) getPipeline(jClient *client.JobClient, name string) (scr
return
}
if script, err = j.getPipelineFromURL(jClient); script != "" || err != nil {
return
}
var job *client.Pipeline
if job, err = jClient.GetPipeline(name); err == nil {
content := ""
......@@ -102,3 +109,19 @@ func (j *JobEditOption) getPipelineFromFile() (script string, err error) {
}
return
}
func (j *JobEditOption) getPipelineFromURL(jClient *client.JobClient) (script string, err error) {
if j.URL == "" {
return
}
var resp *http.Response
var body []byte
httpClient := jClient.JenkinsCore.GetClient()
if resp, err = httpClient.Get(j.URL); err == nil {
if body, err = ioutil.ReadAll(resp.Body); err == nil {
script = string(body)
}
}
return
}
......@@ -3,6 +3,7 @@ package cmd
import (
"bytes"
"io/ioutil"
"net/http"
"os"
"github.com/golang/mock/gomock"
......@@ -10,8 +11,6 @@ import (
"github.com/jenkins-zh/jenkins-cli/mock/mhttp"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
// "github.com/AlecAivazis/survey/v2/core"
// "github.com/AlecAivazis/survey/v2/terminal"
)
var _ = Describe("job edit command", func() {
......@@ -21,6 +20,8 @@ var _ = Describe("job edit command", func() {
jenkinsRoot string
username string
token string
script string
)
BeforeEach(func() {
......@@ -34,6 +35,8 @@ var _ = Describe("job edit command", func() {
jenkinsRoot = "http://localhost:8080/jenkins"
username = "admin"
token = "111e3a2f0231198855dceaff96f20540a9"
script = "sample"
})
AfterEach(func() {
......@@ -51,9 +54,9 @@ var _ = Describe("job edit command", func() {
Expect(err).To(BeNil())
jobName := "test"
client.PrepareForUpdatePipelineJob(roundTripper, jenkinsRoot, "sample", username, token)
client.PrepareForUpdatePipelineJob(roundTripper, jenkinsRoot, script, username, token)
rootCmd.SetArgs([]string{"job", "edit", jobName, "--script", "sample"})
rootCmd.SetArgs([]string{"job", "edit", jobName, "--script", script})
buf := new(bytes.Buffer)
rootCmd.SetOutput(buf)
......@@ -72,10 +75,10 @@ var _ = Describe("job edit command", func() {
tempFile, err := ioutil.TempFile("", "example")
Expect(err).To(BeNil())
defer os.Remove(tempFile.Name())
err = ioutil.WriteFile(tempFile.Name(), []byte("sample"), 0644)
err = ioutil.WriteFile(tempFile.Name(), []byte(script), 0644)
jobName := "test"
client.PrepareForUpdatePipelineJob(roundTripper, jenkinsRoot, "sample", username, token)
client.PrepareForUpdatePipelineJob(roundTripper, jenkinsRoot, script, username, token)
rootCmd.SetArgs([]string{"job", "edit", jobName, "--filename", tempFile.Name(), "--script", ""})
......@@ -86,5 +89,34 @@ var _ = Describe("job edit command", func() {
Expect(buf.String()).To(Equal(""))
})
It("edit with url param", func() {
data, err := generateSampleConfig()
Expect(err).To(BeNil())
err = ioutil.WriteFile(rootOptions.ConfigFile, data, 0664)
Expect(err).To(BeNil())
jobName := "test"
client.PrepareForUpdatePipelineJob(roundTripper, jenkinsRoot, "sample", username, token)
remoteJenkinsfileURL := "http://test"
remoteJenkinsfileReq, _ := http.NewRequest("GET", remoteJenkinsfileURL, nil)
remoteJenkinsfileResponse := &http.Response{
StatusCode: 200,
Request: remoteJenkinsfileReq,
Body: ioutil.NopCloser(bytes.NewBufferString(script)),
}
roundTripper.EXPECT().
RoundTrip(remoteJenkinsfileReq).Return(remoteJenkinsfileResponse, nil)
rootCmd.SetArgs([]string{"job", "edit", jobName, "--filename", "", "--script", "", "--url", remoteJenkinsfileURL})
buf := new(bytes.Buffer)
rootCmd.SetOutput(buf)
_, err = rootCmd.ExecuteC()
Expect(err).To(BeNil())
Expect(buf.String()).To(Equal(""))
})
})
})
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册