未验证 提交 a545effe 编写于 作者: R rick

Fix fields missing when convert Jenkinsfile to JSON

Signed-off-by: Nrick <1450685+LinuxSuRen@users.noreply.github.com>
上级 46e06487
...@@ -614,6 +614,13 @@ func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops ...@@ -614,6 +614,13 @@ func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops
Writes(devops.ResJenkinsfile{})) Writes(devops.ResJenkinsfile{}))
// match /pipeline-model-converter/toJson // match /pipeline-model-converter/toJson
/*
* Considering the following reasons, we use a generic data struct here.
* - A fixed go struct might need to change again once Jenkins has new features.
* - No refer requirement for the specific data struct
* Please read the official document if you want to know more details
* https://github.com/jenkinsci/pipeline-model-definition-plugin/blob/fc8d22192d7d3a17badc3b8af7191a84bb7fd4ca/EXTENDING.md#conversion-to-json-representation-from-jenkinsfile
*/
webservice.Route(webservice.POST("/tojson"). webservice.Route(webservice.POST("/tojson").
To(projectPipelineHandler.ToJson). To(projectPipelineHandler.ToJson).
Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsJenkinsfileTag}). Metadata(restfulspec.KeyOpenAPITags, []string{constants.DevOpsJenkinsfileTag}).
...@@ -621,8 +628,8 @@ func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops ...@@ -621,8 +628,8 @@ func AddPipelineToWebService(webservice *restful.WebService, devopsClient devops
Produces("application/json", "charset=utf-8"). Produces("application/json", "charset=utf-8").
Doc("Convert jenkinsfile to json format. Usually the frontend uses json to show or edit pipeline"). Doc("Convert jenkinsfile to json format. Usually the frontend uses json to show or edit pipeline").
Reads(devops.ReqJenkinsfile{}). Reads(devops.ReqJenkinsfile{}).
Returns(http.StatusOK, RespOK, devops.ResJson{}). Returns(http.StatusOK, RespOK, map[string]interface{}{}).
Writes(devops.ResJson{})) Writes(map[string]interface{}{}))
} }
return nil return nil
} }
......
...@@ -115,7 +115,7 @@ type DevopsOperator interface { ...@@ -115,7 +115,7 @@ type DevopsOperator interface {
CheckCron(projectName string, req *http.Request) (*devops.CheckCronRes, error) CheckCron(projectName string, req *http.Request) (*devops.CheckCronRes, error)
ToJenkinsfile(req *http.Request) (*devops.ResJenkinsfile, error) ToJenkinsfile(req *http.Request) (*devops.ResJenkinsfile, error)
ToJson(req *http.Request) (*devops.ResJson, error) ToJson(req *http.Request) (map[string]interface{}, error)
} }
type devopsOperator struct { type devopsOperator struct {
...@@ -932,7 +932,7 @@ func (d devopsOperator) ToJenkinsfile(req *http.Request) (*devops.ResJenkinsfile ...@@ -932,7 +932,7 @@ func (d devopsOperator) ToJenkinsfile(req *http.Request) (*devops.ResJenkinsfile
return res, err return res, err
} }
func (d devopsOperator) ToJson(req *http.Request) (*devops.ResJson, error) { func (d devopsOperator) ToJson(req *http.Request) (map[string]interface{}, error) {
res, err := d.devopsClient.ToJson(convertToHttpParameters(req)) res, err := d.devopsClient.ToJson(convertToHttpParameters(req))
if err != nil { if err != nil {
......
...@@ -297,7 +297,7 @@ func (d *Devops) CheckCron(projectName string, httpParameters *devops.HttpParame ...@@ -297,7 +297,7 @@ func (d *Devops) CheckCron(projectName string, httpParameters *devops.HttpParame
func (d *Devops) ToJenkinsfile(httpParameters *devops.HttpParameters) (*devops.ResJenkinsfile, error) { func (d *Devops) ToJenkinsfile(httpParameters *devops.HttpParameters) (*devops.ResJenkinsfile, error) {
return nil, nil return nil, nil
} }
func (d *Devops) ToJson(httpParameters *devops.HttpParameters) (*devops.ResJson, error) { func (d *Devops) ToJson(httpParameters *devops.HttpParameters) (map[string]interface{}, error) {
return nil, nil return nil, nil
} }
......
...@@ -872,7 +872,7 @@ func (j *Jenkins) ToJenkinsfile(httpParameters *devops.HttpParameters) (*devops. ...@@ -872,7 +872,7 @@ func (j *Jenkins) ToJenkinsfile(httpParameters *devops.HttpParameters) (*devops.
return res, err return res, err
} }
func (j *Jenkins) ToJson(httpParameters *devops.HttpParameters) (*devops.ResJson, error) { func (j *Jenkins) ToJson(httpParameters *devops.HttpParameters) (map[string]interface{}, error) {
PipelineOjb := &Pipeline{ PipelineOjb := &Pipeline{
HttpParameters: httpParameters, HttpParameters: httpParameters,
Jenkins: j, Jenkins: j,
......
...@@ -856,19 +856,10 @@ func (p *Pipeline) ToJenkinsfile() (*devops.ResJenkinsfile, error) { ...@@ -856,19 +856,10 @@ func (p *Pipeline) ToJenkinsfile() (*devops.ResJenkinsfile, error) {
return &jenkinsfile, err return &jenkinsfile, err
} }
func (p *Pipeline) ToJson() (*devops.ResJson, error) { func (p *Pipeline) ToJson() (result map[string]interface{}, err error) {
res, err := p.Jenkins.SendPureRequest(p.Path, p.HttpParameters) var data []byte
if err != nil { if data, err = p.Jenkins.SendPureRequest(p.Path, p.HttpParameters); err == nil {
klog.Error(err) err = json.Unmarshal(data, &result)
return nil, err
} }
return
var toJson devops.ResJson
err = json.Unmarshal(res, &toJson)
if err != nil {
klog.Error(err)
return nil, err
}
return &toJson, err
} }
...@@ -1025,40 +1025,6 @@ type ReqJenkinsfile struct { ...@@ -1025,40 +1025,6 @@ type ReqJenkinsfile struct {
Jenkinsfile string `json:"jenkinsfile,omitempty" description:"jenkinsfile"` Jenkinsfile string `json:"jenkinsfile,omitempty" description:"jenkinsfile"`
} }
type ResJson struct {
Status string `json:"status,omitempty" description:"status e.g. ok"`
Data struct {
Result string `json:"result,omitempty" description:"result e.g. success"`
JSON struct {
Pipeline struct {
Stages []interface{} `json:"stages,omitempty" description:"stages"`
Agent struct {
Type string `json:"type,omitempty" description:"type"`
Arguments []struct {
Key string `json:"key,omitempty" description:"key"`
Value struct {
IsLiteral bool `json:"isLiteral,omitempty" description:"is literal or not"`
Value string `json:"value,omitempty" description:"value"`
} `json:"value,omitempty"`
} `json:"arguments,omitempty"`
} `json:"agent,omitempty"`
Parameters struct {
Parameters []struct {
Name string `json:"name,omitempty" description:"name"`
Arguments []struct {
Key string `json:"key,omitempty" description:"key"`
Value struct {
IsLiteral bool `json:"isLiteral,omitempty" description:"is literal or not"`
Value interface{} `json:"value,omitempty" description:"value"`
} `json:"value,omitempty"`
} `json:"arguments,omitempty"`
} `json:"parameters,omitempty"`
} `json:"parameters,omitempty"`
} `json:"pipeline,omitempty"`
} `json:"json,omitempty"`
} `json:"data,omitempty"`
}
type NodesDetail struct { type NodesDetail struct {
Class string `json:"_class,omitempty" description:"It’s a fully qualified name and is an identifier of the producer of this resource's capability."` Class string `json:"_class,omitempty" description:"It’s a fully qualified name and is an identifier of the producer of this resource's capability."`
Links struct { Links struct {
...@@ -1202,5 +1168,5 @@ type PipelineOperator interface { ...@@ -1202,5 +1168,5 @@ type PipelineOperator interface {
CheckScriptCompile(projectName, pipelineName string, httpParameters *HttpParameters) (*CheckScript, error) CheckScriptCompile(projectName, pipelineName string, httpParameters *HttpParameters) (*CheckScript, error)
CheckCron(projectName string, httpParameters *HttpParameters) (*CheckCronRes, error) CheckCron(projectName string, httpParameters *HttpParameters) (*CheckCronRes, error)
ToJenkinsfile(httpParameters *HttpParameters) (*ResJenkinsfile, error) ToJenkinsfile(httpParameters *HttpParameters) (*ResJenkinsfile, error)
ToJson(httpParameters *HttpParameters) (*ResJson, error) ToJson(httpParameters *HttpParameters) (map[string]interface{}, error)
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册