提交 1e87ad59 编写于 作者: Z Zhuxiaoyang 提交者: zryfish

Dev (#1)

* add api & rename alias
Signed-off-by: Nsoulseen <sunzhu@yunify.com>
上级 e26a7a0c
...@@ -21,11 +21,16 @@ import ( ...@@ -21,11 +21,16 @@ import (
"github.com/emicklei/go-restful" "github.com/emicklei/go-restful"
"github.com/emicklei/go-restful-openapi" "github.com/emicklei/go-restful-openapi"
"k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/schema"
"kubesphere.io/kubesphere/pkg/apiserver/devops" devopsapi "kubesphere.io/kubesphere/pkg/apiserver/devops"
"kubesphere.io/kubesphere/pkg/apiserver/runtime" "kubesphere.io/kubesphere/pkg/apiserver/runtime"
"kubesphere.io/kubesphere/pkg/models/devops"
"net/http"
) )
const GroupName = "devops.kubesphere.io" const (
GroupName = "devops.kubesphere.io"
RespMessage = "ok"
)
var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"} var GroupVersion = schema.GroupVersion{Group: GroupName, Version: "v1alpha2"}
...@@ -41,15 +46,17 @@ func addWebService(c *restful.Container) error { ...@@ -41,15 +46,17 @@ func addWebService(c *restful.Container) error {
// match Jenkisn api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}" // match Jenkisn api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}"
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}"). webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}").
To(devops.GetPipeline). To(devopsapi.GetPipeline).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get DevOps Pipelines."). Doc("Get DevOps Pipelines.").
Param(webservice.PathParameter("pipelineName", "pipeline name")). Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("projectName", "devops project name"))) Param(webservice.PathParameter("projectName", "devops project name")).
Returns(http.StatusOK, RespMessage, devops.Pipeline{}).
Writes(devops.Pipeline{}))
// match Jenkisn api: "jenkins_api/blue/rest/search" // match Jenkisn api: "jenkins_api/blue/rest/search"
webservice.Route(webservice.GET("/devops/search"). webservice.Route(webservice.GET("/devops/search").
To(devops.SearchPipelines). To(devopsapi.SearchPipelines).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Search DevOps resource."). Doc("Search DevOps resource.").
Param(webservice.QueryParameter("q", "query pipelines"). Param(webservice.QueryParameter("q", "query pipelines").
...@@ -63,11 +70,13 @@ func addWebService(c *restful.Container) error { ...@@ -63,11 +70,13 @@ func addWebService(c *restful.Container) error {
DataFormat("start=%d")). DataFormat("start=%d")).
Param(webservice.QueryParameter("limit", "limit count"). Param(webservice.QueryParameter("limit", "limit count").
Required(false). Required(false).
DataFormat("limit=%d"))) DataFormat("limit=%d")).
Returns(http.StatusOK, RespMessage, []devops.Pipeline{}).
Writes([]devops.Pipeline{}))
// match Jenkisn api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/runs/" // match Jenkisn api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/runs/"
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/runs"). webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/runs").
To(devops.SearchPipelineRuns). To(devopsapi.SearchPipelineRuns).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Search DevOps Pipelines runs."). Doc("Search DevOps Pipelines runs.").
Param(webservice.PathParameter("pipelineName", "pipeline name")). Param(webservice.PathParameter("pipelineName", "pipeline name")).
...@@ -77,21 +86,31 @@ func addWebService(c *restful.Container) error { ...@@ -77,21 +86,31 @@ func addWebService(c *restful.Container) error {
DataFormat("start=%d")). DataFormat("start=%d")).
Param(webservice.QueryParameter("limit", "limit count"). Param(webservice.QueryParameter("limit", "limit count").
Required(false). Required(false).
DataFormat("limit=%d"))) DataFormat("limit=%d")).
Param(webservice.QueryParameter("branch", "branch ").
Required(false).
DataFormat("branch=%s")).
Returns(http.StatusOK, RespMessage, []devops.PipelineRun{}).
Writes([]devops.PipelineRun{}))
// match Jenkins api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/" // match Jenkins api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/"
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}"). webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}").
To(devops.GetPipelineRun). To(devopsapi.GetPipelineRun).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get DevOps Pipelines run."). Doc("Get DevOps Pipelines run.").
Param(webservice.PathParameter("pipelineName", "pipeline name")). Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("projectName", "devops project name")). Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")). Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id"))) Param(webservice.PathParameter("runId", "pipeline runs id")).
Param(webservice.QueryParameter("start", "start").
Required(false).
DataFormat("start=%d")).
Returns(http.StatusOK, RespMessage, devops.PipelineRun{}).
Writes(devops.PipelineRun{}))
// match Jenkins api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/nodes" // match Jenkins api "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/nodes"
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes"). webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes").
To(devops.GetPipelineRunNodes). To(devopsapi.GetPipelineRunNodes).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get node on DevOps Pipelines run."). Doc("Get node on DevOps Pipelines run.").
Param(webservice.PathParameter("projectName", "devops project name")). Param(webservice.PathParameter("projectName", "devops project name")).
...@@ -101,13 +120,16 @@ func addWebService(c *restful.Container) error { ...@@ -101,13 +120,16 @@ func addWebService(c *restful.Container) error {
Param(webservice.QueryParameter("limit", "limit"). Param(webservice.QueryParameter("limit", "limit").
Required(false). Required(false).
DataFormat("limit=%d"). DataFormat("limit=%d").
DefaultValue("limit=10000"))) DefaultValue("limit=10000")).
Returns(http.StatusOK, RespMessage, []devops.Nodes{}).
Writes([]devops.Nodes{}))
// match "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}/log/?start=0" // match "/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}/log/?start=0"
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}/log"). webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}/log").
To(devops.GetStepLog). To(devopsapi.GetStepLog).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get Pipelines step log."). Doc("Get pipelines step log.").
Produces("text/plain; charset=utf-8").
Param(webservice.PathParameter("projectName", "devops project name")). Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")). Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")). Param(webservice.PathParameter("branchName", "pipeline branch name")).
...@@ -121,20 +143,198 @@ func addWebService(c *restful.Container) error { ...@@ -121,20 +143,198 @@ func addWebService(c *restful.Container) error {
// match "/blue/rest/organizations/jenkins/scm/github/validate/" // match "/blue/rest/organizations/jenkins/scm/github/validate/"
webservice.Route(webservice.PUT("/devops/scm/{scmId}/validate"). webservice.Route(webservice.PUT("/devops/scm/{scmId}/validate").
To(devops.Validate). To(devopsapi.Validate).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Validate Github personal access token."). Doc("Validate Github personal access token.").
Param(webservice.PathParameter("scmId", "SCM id"))) Param(webservice.PathParameter("scmId", "SCM id")).
Returns(http.StatusOK, RespMessage, devops.Validates{}).
Writes(devops.Validates{}))
// match "/blue/rest/organizations/jenkins/scm/{scmId}/organizations/?credentialId=github" // match "/blue/rest/organizations/jenkins/scm/{scmId}/organizations/?credentialId=github"
webservice.Route(webservice.GET("/devops/scm/{scmId}/organizations"). webservice.Route(webservice.GET("/devops/scm/{scmId}/organizations").
To(devops.GetOrgSCM). To(devopsapi.GetSCMOrg).
Metadata(restfulspec.KeyOpenAPITags, tags). Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("List organizations of SCM"). Doc("List organizations of SCM").
Param(webservice.PathParameter("scmId", "SCM id")). Param(webservice.PathParameter("scmId", "SCM id")).
Param(webservice.QueryParameter("credentialId", "credentialId for SCM"). Param(webservice.QueryParameter("credentialId", "credential id for SCM").
Required(true).
DataFormat("credentialId=%s")).
Returns(http.StatusOK, RespMessage, []devops.SCMOrg{}).
Writes([]devops.SCMOrg{}))
// match "/blue/rest/organizations/jenkins/scm/{scmId}/organizations/{organizationId}/repositories/?credentialId=&pageNumber&pageSize="
webservice.Route(webservice.GET("/devops/scm/{scmId}/organizations/{organizationId}/repositories").
To(devopsapi.GetOrgRepo).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get SCM repositories in an organization").
Param(webservice.PathParameter("scmId", "SCM id")).
Param(webservice.PathParameter("organizationId", "organization Id, such as github username")).
Param(webservice.QueryParameter("credentialId", "credential id for SCM").
Required(true).
DataFormat("credentialId=%s")).
Param(webservice.QueryParameter("pageNumber", "page number").
Required(true).
DataFormat("pageNumber=%d")).
Param(webservice.QueryParameter("pageSize", "page size").
Required(true).
DataFormat("pageSize=%d")).
Returns(http.StatusOK, RespMessage, []devops.OrgRepo{}).
Writes([]devops.OrgRepo{}))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/stop/
webservice.Route(webservice.PUT("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/stop").
To(devopsapi.StopPipeline).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Stop pipeline in running").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id")).
Param(webservice.QueryParameter("blocking", "stop and between each retries will sleep").
Required(false).
DataFormat("blocking=%t").
DefaultValue("blocking=false")).
Param(webservice.QueryParameter("timeOutInSecs", "the time of stop and between each retries sleep").
Required(false).
DataFormat("timeOutInSecs=%d").
DefaultValue("timeOutInSecs=10")).
Returns(http.StatusOK, RespMessage, devops.StopPipe{}).
Writes(devops.StopPipe{}))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/replay/
webservice.Route(webservice.POST("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/replay").
To(devopsapi.ReplayPipeline).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Replay pipeline").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id")).
Returns(http.StatusOK, RespMessage, devops.ReplayPipe{}).
Writes(devops.ReplayPipe{}))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/log/?start=0
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/log").
To(devopsapi.GetRunLog).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get Pipelines run log.").
Produces("text/plain; charset=utf-8").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id")).
Param(webservice.QueryParameter("start", "start").
Required(true). Required(true).
DataFormat("credentialId=%s"))) DataFormat("start=%d").
DefaultValue("start=0")))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/artifacts
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/artifacts").
To(devopsapi.GetArtifacts).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get pipeline artifacts.").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id")).
Param(webservice.QueryParameter("start", "start page").
Required(false).
DataFormat("start=%d")).
Param(webservice.QueryParameter("limit", "limit count").
Required(false).
DataFormat("limit=%d")).
Returns(http.StatusOK, "The filed of \"Url\" in response can download artifacts", []devops.Artifacts{}).
Writes([]devops.Artifacts{}))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/?filter=&start&limit=
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/branches").
To(devopsapi.GetPipeBranch).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get pipeline of branch.").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.QueryParameter("filter", "filter remote").
Required(true).
DataFormat("filter=%s")).
Param(webservice.QueryParameter("start", "start").
Required(true).
DataFormat("start=%d")).
Param(webservice.QueryParameter("limit", "limit count").
Required(true).
DataFormat("limit=%d")).
Returns(http.StatusOK, RespMessage, []devops.PipeBranch{}).
Writes([]devops.PipeBranch{}))
// /blue/rest/organizations/jenkins/pipelines/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}
webservice.Route(webservice.POST("/devops/{projectName}/pipelines/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/{stepId}").
To(devopsapi.CheckPipeline).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Pauses pipeline execution and allows the user to interact and control the flow of the build.").
Reads(devops.CheckPlayload{}).
Produces("text/plain; charset=utf-8").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline runs id")).
Param(webservice.PathParameter("nodeId", "pipeline node id")).
Param(webservice.PathParameter("stepId", "pipeline step id")))
// match /job/project-8QnvykoJw4wZ/job/test-1/indexing/consoleText
webservice.Route(webservice.GET("/devops/{projectName}/pipelines/{pipelineName}/console/log").
To(devopsapi.GetConsoleLog).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get index console log.").
Produces("text/plain; charset=utf-8").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")))
// match /job/{projectName}/job/{pipelineName}/build?delay=0
webservice.Route(webservice.POST("/devops/{projectName}/pipelines/{pipelineName}/scan").
To(devopsapi.ScanBranch).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Start a build.").
Produces("text/html; charset=utf-8").
Param(webservice.PathParameter("projecFtName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.QueryParameter("delay", "delay time").
Required(true).
DataFormat("delay=%d")))
// match /blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{}/runs/
webservice.Route(webservice.POST("/devops/{projectName}/pipeline/{pipelineName}/branches/{brancheName}/run").
To(devopsapi.RunPipeline).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get pipeline artifacts.").
Reads(devops.RunPayload{}).
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Returns(http.StatusOK, RespMessage, devops.QueuedBlueRun{}).
Writes(devops.QueuedBlueRun{}))
// match /pipeline_status/blue/rest/organizations/jenkins/pipelines/{projectName}/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/?limit=
webservice.Route(webservice.GET("/devops/{projectName}/pipeline/{pipelineName}/branches/{branchName}/runs/{runId}/nodes/{nodeId}/steps/status").
To(devopsapi.GetStepsStatus).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get pipeline steps status.").
Param(webservice.PathParameter("projectName", "devops project name")).
Param(webservice.PathParameter("pipelineName", "pipeline name")).
Param(webservice.PathParameter("branchName", "pipeline branch name")).
Param(webservice.PathParameter("runId", "pipeline run name")).
Param(webservice.PathParameter("nodeId", "pipeline node id")).
Param(webservice.QueryParameter("limit", "limit count").
Required(true).
DataFormat("limit=%d")).
Returns(http.StatusOK, RespMessage, []devops.QueuedBlueRun{}).
Writes([]devops.QueuedBlueRun{}))
// match /crumbIssuer/api/json/
webservice.Route(webservice.GET("/devops/crumbIssuer").
To(devopsapi.GetCrumb).
Metadata(restfulspec.KeyOpenAPITags, tags).
Doc("Get crumb").
Returns(http.StatusOK, RespMessage, devops.Crumb{}).
Writes(devops.Crumb{}))
c.Add(webservice) c.Add(webservice)
......
...@@ -20,7 +20,6 @@ package devops ...@@ -20,7 +20,6 @@ package devops
import ( import (
"github.com/emicklei/go-restful" "github.com/emicklei/go-restful"
log "github.com/golang/glog" log "github.com/golang/glog"
"kubesphere.io/kubesphere/pkg/errors"
"kubesphere.io/kubesphere/pkg/models/devops" "kubesphere.io/kubesphere/pkg/models/devops"
"net/http" "net/http"
) )
...@@ -39,7 +38,6 @@ func GetPipeline(req *restful.Request, resp *restful.Response) { ...@@ -39,7 +38,6 @@ func GetPipeline(req *restful.Request, resp *restful.Response) {
} }
func SearchPipelines(req *restful.Request, resp *restful.Response) { func SearchPipelines(req *restful.Request, resp *restful.Response) {
res, err := devops.SearchPipelines(req.Request) res, err := devops.SearchPipelines(req.Request)
if err != nil { if err != nil {
parseErr(err, resp) parseErr(err, resp)
...@@ -120,10 +118,180 @@ func Validate(req *restful.Request, resp *restful.Response) { ...@@ -120,10 +118,180 @@ func Validate(req *restful.Request, resp *restful.Response) {
_, _ = resp.Write(res) _, _ = resp.Write(res)
} }
func GetOrgSCM(req *restful.Request, resp *restful.Response) { func GetSCMOrg(req *restful.Request, resp *restful.Response) {
scmId := req.PathParameter("scmId") scmId := req.PathParameter("scmId")
res, err := devops.GetOrgSCM(scmId, req.Request) res, err := devops.GetSCMOrg(scmId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func GetOrgRepo(req *restful.Request, resp *restful.Response) {
scmId := req.PathParameter("scmId")
organizationId := req.PathParameter("organizationId")
res, err := devops.GetOrgRepo(scmId, organizationId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func StopPipeline(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
res, err := devops.StopPipeline(projectName, pipelineName, branchName, runId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func ReplayPipeline(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
res, err := devops.ReplayPipeline(projectName, pipelineName, branchName, runId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func GetRunLog(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
res, err := devops.GetRunLog(projectName, pipelineName, branchName, runId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_, _ = resp.Write(res)
}
func GetArtifacts(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
res, err := devops.GetArtifacts(projectName, pipelineName, branchName, runId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func GetPipeBranch(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
res, err := devops.GetPipeBranch(projectName, pipelineName, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func CheckPipeline(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
nodeId := req.PathParameter("nodeId")
stepId := req.PathParameter("stepId")
res, err := devops.CheckPipeline(projectName, pipelineName, branchName, runId, nodeId, stepId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_, _ = resp.Write(res)
}
func GetConsoleLog(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
res, err := devops.GetConsoleLog(projectName, pipelineName, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_, _ = resp.Write(res)
}
func ScanBranch(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
res, err := devops.ScanBranch(projectName, pipelineName, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_, _ = resp.Write(res)
}
func RunPipeline(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
res, err := devops.RunPipeline(projectName, pipelineName, branchName, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func GetStepsStatus(req *restful.Request, resp *restful.Response) {
projectName := req.PathParameter("projectName")
pipelineName := req.PathParameter("pipelineName")
branchName := req.PathParameter("branchName")
runId := req.PathParameter("runId")
nodeId := req.PathParameter("nodeId")
res, err := devops.GetStepsStatus(projectName, pipelineName, branchName, runId, nodeId, req.Request)
if err != nil {
parseErr(err, resp)
return
}
_ = resp.WriteAsJson(res)
}
func GetCrumb(req *restful.Request, resp *restful.Response) {
res, err := devops.GetCrumb(req.Request)
if err != nil { if err != nil {
parseErr(err, resp) parseErr(err, resp)
return return
...@@ -135,9 +303,9 @@ func GetOrgSCM(req *restful.Request, resp *restful.Response) { ...@@ -135,9 +303,9 @@ func GetOrgSCM(req *restful.Request, resp *restful.Response) {
func parseErr(err error, resp *restful.Response) { func parseErr(err error, resp *restful.Response) {
log.Error(err) log.Error(err)
if jErr, ok := err.(*devops.JkError); ok { if jErr, ok := err.(*devops.JkError); ok {
_ = resp.WriteHeaderAndEntity(jErr.Code, err) _ = resp.WriteError(jErr.Code, err)
} else { } else {
_ = resp.WriteHeaderAndEntity(http.StatusInternalServerError, errors.Wrap(err)) _ = resp.WriteError(http.StatusInternalServerError, err)
} }
return return
} }
...@@ -39,15 +39,23 @@ func init() { ...@@ -39,15 +39,23 @@ func init() {
func GetPipeline(projectName, pipelineName string, req *http.Request) (*Pipeline, error) { func GetPipeline(projectName, pipelineName string, req *http.Request) (*Pipeline, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineUrl, projectName, pipelineName) baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineUrl, projectName, pipelineName)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
var res = new(Pipeline)
resBody, err := jenkinsClient(baseUrl, req) err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
var res = new(Pipeline) return res, err
err = json.Unmarshal(resBody, &res) }
func SearchPipelines(req *http.Request) ([]interface{}, error) {
baseUrl := JenkinsUrl + SearchPipelineUrl + req.URL.RawQuery
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{}
err := jenkinsClient(baseUrl, req, &res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -56,18 +64,40 @@ func GetPipeline(projectName, pipelineName string, req *http.Request) (*Pipeline ...@@ -56,18 +64,40 @@ func GetPipeline(projectName, pipelineName string, req *http.Request) (*Pipeline
return res, err return res, err
} }
func SearchPipelines(req *http.Request) ([]interface{}, error) { func SearchPipelineRuns(projectName, pipelineName string, req *http.Request) ([]interface{}, error) {
baseUrl := JenkinsUrl + SearchPipelineUrl + req.URL.RawQuery baseUrl := fmt.Sprintf(JenkinsUrl+SearchPipelineRunUrl+req.URL.RawQuery, projectName, pipelineName)
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{}
err := jenkinsClient(baseUrl, req, &res)
if err != nil {
log.Error(err)
return nil, err
}
return res, err
}
func GetPipelineRun(projectName, pipelineName, branchName, runId string, req *http.Request) (*PipelineRun, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineRunUrl, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
var res = new(PipelineRun)
resBody, err := jenkinsClient(baseUrl, req) err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
return res, err
}
func GetPipelineRunNodes(projectName, pipelineName, branchName, runId string, req *http.Request) ([]interface{}, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineRunNodesUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{} var res []interface{}
err = json.Unmarshal(resBody, &res)
err := jenkinsClient(baseUrl, req, &res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -76,18 +106,38 @@ func SearchPipelines(req *http.Request) ([]interface{}, error) { ...@@ -76,18 +106,38 @@ func SearchPipelines(req *http.Request) ([]interface{}, error) {
return res, err return res, err
} }
func SearchPipelineRuns(projectName, pipelineName string, req *http.Request) ([]interface{}, error) { func GetStepLog(projectName, pipelineName, branchName, runId, stepId, nodeId string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+SearchPipelineRunUrl+req.URL.RawQuery, projectName, pipelineName) baseUrl := fmt.Sprintf(JenkinsUrl+GetStepLogUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId, stepId)
log.Infof("Jenkins-url: " + baseUrl)
resBody, err := Client(baseUrl, req)
if err != nil {
log.Error(err)
return nil, err
}
return resBody, err
}
func Validate(scmId string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+ValidateUrl, scmId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := jenkinsClient(baseUrl, req) resBody, err := Client(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
return resBody, err
}
func GetSCMOrg(scmId string, req *http.Request) ([]interface{}, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetSCMOrgUrl+req.URL.RawQuery, scmId)
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{} var res []interface{}
err = json.Unmarshal(resBody, &res)
err := jenkinsClient(baseUrl, req, &res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -96,18 +146,26 @@ func SearchPipelineRuns(projectName, pipelineName string, req *http.Request) ([] ...@@ -96,18 +146,26 @@ func SearchPipelineRuns(projectName, pipelineName string, req *http.Request) ([]
return res, err return res, err
} }
func GetPipelineRun(projectName, pipelineName, branchName, runId string, req *http.Request) (*Pipeline, error) { func GetOrgRepo(scmId, organizationId string, req *http.Request) (*OrgRepo, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineRunUrl, projectName, pipelineName, branchName, runId) baseUrl := fmt.Sprintf(JenkinsUrl+GetOrgRepoUrl+req.URL.RawQuery, scmId, organizationId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
var res = new(OrgRepo)
resBody, err := jenkinsClient(baseUrl, req) err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
var res = new(Pipeline) return res, err
err = json.Unmarshal(resBody, &res) }
func StopPipeline(projectName, pipelineName, branchName, runId string, req *http.Request) (*StopPipe, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+StopPipelineUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl)
var res = new(StopPipe)
err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -116,18 +174,39 @@ func GetPipelineRun(projectName, pipelineName, branchName, runId string, req *ht ...@@ -116,18 +174,39 @@ func GetPipelineRun(projectName, pipelineName, branchName, runId string, req *ht
return res, err return res, err
} }
func GetPipelineRunNodes(projectName, pipelineName, branchName, runId string, req *http.Request) ([]interface{}, error) { func ReplayPipeline(projectName, pipelineName, branchName, runId string, req *http.Request) (*ReplayPipe, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetPipelineRunNodesUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId) baseUrl := fmt.Sprintf(JenkinsUrl+ReplayPipelineUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
var res = new(ReplayPipe)
resBody, err := jenkinsClient(baseUrl, req) err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
return res, err
}
func GetRunLog(projectName, pipelineName, branchName, runId string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetRunLogUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl)
resBody, err := Client(baseUrl, req)
if err != nil {
log.Error(err)
return nil, err
}
return resBody, err
}
func GetArtifacts(projectName, pipelineName, branchName, runId string, req *http.Request) ([]interface{}, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetArtifactsUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId)
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{} var res []interface{}
err = json.Unmarshal(resBody, &res)
err := jenkinsClient(baseUrl, req, &res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -136,11 +215,25 @@ func GetPipelineRunNodes(projectName, pipelineName, branchName, runId string, re ...@@ -136,11 +215,25 @@ func GetPipelineRunNodes(projectName, pipelineName, branchName, runId string, re
return res, err return res, err
} }
func GetStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId string, req *http.Request) ([]byte, error) { func GetPipeBranch(projectName, pipelineName string, req *http.Request) ([]interface{}, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetStepLogUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId, stepId) baseUrl := fmt.Sprintf(JenkinsUrl+GetPipeBranchUrl+req.URL.RawQuery, projectName, pipelineName)
log.Infof("Jenkins-url: " + baseUrl)
var res []interface{}
err := jenkinsClient(baseUrl, req, &res)
if err != nil {
log.Error(err)
return nil, err
}
return res, err
}
func CheckPipeline(projectName, pipelineName, branchName, runId, nodeId, stepId string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+CheckPipelineUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId, stepId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := jenkinsClient(baseUrl, req) resBody, err := Client(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -149,11 +242,11 @@ func GetStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId str ...@@ -149,11 +242,11 @@ func GetStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId str
return resBody, err return resBody, err
} }
func Validate(scmId string, req *http.Request) ([]byte, error) { func GetConsoleLog(projectName, pipelineName string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+ValidateUrl, scmId) baseUrl := fmt.Sprintf(JenkinsUrl+GetConsoleLogUrl+req.URL.RawQuery, projectName, pipelineName)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := jenkinsClient(baseUrl, req) resBody, err := Client(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -162,18 +255,39 @@ func Validate(scmId string, req *http.Request) ([]byte, error) { ...@@ -162,18 +255,39 @@ func Validate(scmId string, req *http.Request) ([]byte, error) {
return resBody, err return resBody, err
} }
func GetOrgSCM(scmId string, req *http.Request) ([]interface{}, error) { func ScanBranch(projectName, pipelineName string, req *http.Request) ([]byte, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetOrgSCMUrl+req.URL.RawQuery, scmId) baseUrl := fmt.Sprintf(JenkinsUrl+ScanBranchUrl+req.URL.RawQuery, projectName, pipelineName)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := jenkinsClient(baseUrl, req) resBody, err := Client(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
} }
var res []interface{} return resBody, err
err = json.Unmarshal(resBody, &res) }
func RunPipeline(projectName, pipelineName, branchName string, req *http.Request) (*QueuedBlueRun, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+RunPipelineUrl+req.URL.RawQuery, projectName, pipelineName, branchName)
log.Infof("Jenkins-url: " + baseUrl)
var res = new(QueuedBlueRun)
err := jenkinsClient(baseUrl, req, res)
if err != nil {
log.Error(err)
return nil, err
}
return res, err
}
func GetStepsStatus(projectName, pipelineName, branchName, runId, nodeId string, req *http.Request) (*NodeStatus, error) {
baseUrl := fmt.Sprintf(JenkinsUrl+GetStepsStatusUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId)
log.Infof("Jenkins-url: " + baseUrl)
var res = new(NodeStatus)
err := jenkinsClient(baseUrl, req, res)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, err
...@@ -182,8 +296,39 @@ func GetOrgSCM(scmId string, req *http.Request) ([]interface{}, error) { ...@@ -182,8 +296,39 @@ func GetOrgSCM(scmId string, req *http.Request) ([]interface{}, error) {
return res, err return res, err
} }
// create jenkins request func GetCrumb(req *http.Request) (*Crumb, error) {
func jenkinsClient(baseUrl string, req *http.Request) ([]byte, error) { baseUrl := fmt.Sprintf(JenkinsUrl + GetCrumbUrl)
log.Infof("Jenkins-url: " + baseUrl)
var res = new(Crumb)
err := jenkinsClient(baseUrl, req, res)
if err != nil {
log.Error(err)
return nil, err
}
return res, err
}
// jenkins request and parse response
func jenkinsClient(baseUrl string, req *http.Request, res interface{}) error {
resBody, err := Client(baseUrl, req)
if err != nil {
log.Error(err)
return err
}
err = json.Unmarshal(resBody, res)
if err != nil {
log.Error(err)
return err
}
return nil
}
// create request
func Client(baseUrl string, req *http.Request) ([]byte, error) {
newReqUrl, err := url.Parse(baseUrl) newReqUrl, err := url.Parse(baseUrl)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
...@@ -210,11 +355,8 @@ func jenkinsClient(baseUrl string, req *http.Request) ([]byte, error) { ...@@ -210,11 +355,8 @@ func jenkinsClient(baseUrl string, req *http.Request) ([]byte, error) {
log.Info(string(resBody)) log.Info(string(resBody))
if resp.StatusCode >= http.StatusBadRequest { if resp.StatusCode >= http.StatusBadRequest {
jkerr := new(JkError) jkerr := new(JkError)
err = json.Unmarshal(resBody, jkerr) jkerr.Code = resp.StatusCode
if err != nil { jkerr.Message = http.StatusText(resp.StatusCode)
log.Error(err)
return nil, err
}
return nil, jkerr return nil, jkerr
} }
......
...@@ -18,15 +18,8 @@ ...@@ -18,15 +18,8 @@
package devops package devops
type JkError struct { type JkError struct {
Message string `json:"message"`
Code int `json:"code"`
Errors []Errors `json:"errors"`
}
type Errors struct {
Message string `json:"message"` Message string `json:"message"`
Code string `json:"code"` Code int `json:"code"`
Field string `json:"field"`
} }
func (err *JkError) Error() string { func (err *JkError) Error() string {
......
此差异已折叠。
...@@ -26,5 +26,17 @@ const ( ...@@ -26,5 +26,17 @@ const (
GetPipelineRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/?" GetPipelineRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/?"
GetStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/%s/log/?" GetStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/%s/log/?"
ValidateUrl = "/blue/rest/organizations/jenkins/scm/%s/validate" ValidateUrl = "/blue/rest/organizations/jenkins/scm/%s/validate"
GetOrgSCMUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/?" GetSCMOrgUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/?"
GetOrgRepoUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/%s/repositories/?"
StopPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/stop/?"
ReplayPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/replay/"
GetRunLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/log/?"
GetArtifactsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/artifacts/?"
GetPipeBranchUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/?"
GetConsoleLogUrl = "/job/%s/job/%s/indexing/consoleText"
ScanBranchUrl = "/job/%s/job/%s/build?"
RunPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/"
GetStepsStatusUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/?"
CheckPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/%s/"
GetCrumbUrl = "/crumbIssuer/api/json/"
) )
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册