未验证 提交 85a6b69f 编写于 作者: B Benjamin Huo 提交者: GitHub

Merge branch 'master' into monitoring

...@@ -88,7 +88,8 @@ func AddControllers(mgr manager.Manager, cfg *rest.Config, stopCh <-chan struct{ ...@@ -88,7 +88,8 @@ func AddControllers(mgr manager.Manager, cfg *rest.Config, stopCh <-chan struct{
informerFactory.Core().V1().Services(), informerFactory.Core().V1().Services(),
servicemeshInformer.Servicemesh().V1alpha2().ServicePolicies(), servicemeshInformer.Servicemesh().V1alpha2().ServicePolicies(),
kubeClient, kubeClient,
istioclient) istioclient,
servicemeshclient)
apController := application.NewApplicationController(informerFactory.Core().V1().Services(), apController := application.NewApplicationController(informerFactory.Core().V1().Services(),
informerFactory.Apps().V1().Deployments(), informerFactory.Apps().V1().Deployments(),
......
...@@ -104,11 +104,15 @@ func GetBranchStepLog(req *restful.Request, resp *restful.Response) { ...@@ -104,11 +104,15 @@ func GetBranchStepLog(req *restful.Request, resp *restful.Response) {
nodeId := req.PathParameter("nodeId") nodeId := req.PathParameter("nodeId")
stepId := req.PathParameter("stepId") stepId := req.PathParameter("stepId")
res, err := devops.GetBranchStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId, req.Request) res, header, err := devops.GetBranchStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId, req.Request)
if err != nil { if err != nil {
parseErr(err, resp) parseErr(err, resp)
return return
} }
for k, v := range header {
resp.AddHeader(k, v[0])
}
resp.Write(res) resp.Write(res)
} }
...@@ -119,11 +123,14 @@ func GetStepLog(req *restful.Request, resp *restful.Response) { ...@@ -119,11 +123,14 @@ func GetStepLog(req *restful.Request, resp *restful.Response) {
nodeId := req.PathParameter("nodeId") nodeId := req.PathParameter("nodeId")
stepId := req.PathParameter("stepId") stepId := req.PathParameter("stepId")
res, err := devops.GetStepLog(projectName, pipelineName, runId, nodeId, stepId, req.Request) res, header, err := devops.GetStepLog(projectName, pipelineName, runId, nodeId, stepId, req.Request)
if err != nil { if err != nil {
parseErr(err, resp) parseErr(err, resp)
return return
} }
for k, v := range header {
resp.AddHeader(k, v[0])
}
resp.Write(res) resp.Write(res)
} }
......
...@@ -149,7 +149,7 @@ func NewApplicationController(serviceInformer coreinformers.ServiceInformer, ...@@ -149,7 +149,7 @@ func NewApplicationController(serviceInformer coreinformers.ServiceInformer,
} }
func (v *ApplicationController) Start(stopCh <-chan struct{}) error { func (v *ApplicationController) Start(stopCh <-chan struct{}) error {
v.Run(5, stopCh) v.Run(2, stopCh)
return nil return nil
} }
......
...@@ -34,6 +34,7 @@ import ( ...@@ -34,6 +34,7 @@ import (
"k8s.io/client-go/util/workqueue" "k8s.io/client-go/util/workqueue"
"time" "time"
servicemeshclient "kubesphere.io/kubesphere/pkg/client/clientset/versioned"
servicemeshinformers "kubesphere.io/kubesphere/pkg/client/informers/externalversions/servicemesh/v1alpha2" servicemeshinformers "kubesphere.io/kubesphere/pkg/client/informers/externalversions/servicemesh/v1alpha2"
servicemeshlisters "kubesphere.io/kubesphere/pkg/client/listers/servicemesh/v1alpha2" servicemeshlisters "kubesphere.io/kubesphere/pkg/client/listers/servicemesh/v1alpha2"
) )
...@@ -53,6 +54,7 @@ type DestinationRuleController struct { ...@@ -53,6 +54,7 @@ type DestinationRuleController struct {
client clientset.Interface client clientset.Interface
destinationRuleClient istioclientset.Interface destinationRuleClient istioclientset.Interface
servicemeshClient servicemeshclient.Interface
eventBroadcaster record.EventBroadcaster eventBroadcaster record.EventBroadcaster
eventRecorder record.EventRecorder eventRecorder record.EventRecorder
...@@ -79,7 +81,8 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor ...@@ -79,7 +81,8 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor
serviceInformer coreinformers.ServiceInformer, serviceInformer coreinformers.ServiceInformer,
servicePolicyInformer servicemeshinformers.ServicePolicyInformer, servicePolicyInformer servicemeshinformers.ServicePolicyInformer,
client clientset.Interface, client clientset.Interface,
destinationRuleClient istioclientset.Interface) *DestinationRuleController { destinationRuleClient istioclientset.Interface,
servicemeshClient servicemeshclient.Interface) *DestinationRuleController {
broadcaster := record.NewBroadcaster() broadcaster := record.NewBroadcaster()
broadcaster.StartLogging(func(format string, args ...interface{}) { broadcaster.StartLogging(func(format string, args ...interface{}) {
...@@ -95,6 +98,7 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor ...@@ -95,6 +98,7 @@ func NewDestinationRuleController(deploymentInformer informersv1.DeploymentInfor
v := &DestinationRuleController{ v := &DestinationRuleController{
client: client, client: client,
destinationRuleClient: destinationRuleClient, destinationRuleClient: destinationRuleClient,
servicemeshClient: servicemeshClient,
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "destinationrule"), queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "destinationrule"),
workerLoopPeriod: time.Second, workerLoopPeriod: time.Second,
} }
...@@ -211,12 +215,20 @@ func (v *DestinationRuleController) syncService(key string) error { ...@@ -211,12 +215,20 @@ func (v *DestinationRuleController) syncService(key string) error {
service, err := v.serviceLister.Services(namespace).Get(name) service, err := v.serviceLister.Services(namespace).Get(name)
if err != nil { if err != nil {
// Delete the corresponding destinationrule if there is any, as the service has been deleted. // delete the corresponding destinationrule if there is any, as the service has been deleted.
err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Delete(name, nil) err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Delete(name, nil)
if err != nil && !errors.IsNotFound(err) { if err != nil && !errors.IsNotFound(err) {
log.Error(err, "delete destination rule failed", "namespace", namespace, "name", name) log.Error(err, "delete destination rule failed", "namespace", namespace, "name", name)
return err return err
} }
// delete orphan service policy if there is any
err = v.servicemeshClient.ServicemeshV1alpha2().ServicePolicies(namespace).Delete(name, nil)
if err != nil && !errors.IsNotFound(err) {
log.Error(err, "delete orphan service policy failed", "namespace", namespace, "name", name)
return err
}
return nil return nil
} }
...@@ -293,6 +305,7 @@ func (v *DestinationRuleController) syncService(key string) error { ...@@ -293,6 +305,7 @@ func (v *DestinationRuleController) syncService(key string) error {
} }
dr := currentDestinationRule.DeepCopy() dr := currentDestinationRule.DeepCopy()
dr.Spec.TrafficPolicy = nil
dr.Spec.Subsets = subsets dr.Spec.Subsets = subsets
// //
if len(servicePolicies) > 0 { if len(servicePolicies) > 0 {
...@@ -332,9 +345,9 @@ func (v *DestinationRuleController) syncService(key string) error { ...@@ -332,9 +345,9 @@ func (v *DestinationRuleController) syncService(key string) error {
} }
if createDestinationRule { if createDestinationRule {
newDestinationRule, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Create(newDestinationRule) _, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Create(newDestinationRule)
} else { } else {
newDestinationRule, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Update(newDestinationRule) _, err = v.destinationRuleClient.NetworkingV1alpha3().DestinationRules(namespace).Update(newDestinationRule)
} }
if err != nil { if err != nil {
......
...@@ -231,6 +231,14 @@ func (v *VirtualServiceController) syncService(key string) error { ...@@ -231,6 +231,14 @@ func (v *VirtualServiceController) syncService(key string) error {
log.Error(err, "delete orphan virtualservice failed", "namespace", namespace, "name", service.Name) log.Error(err, "delete orphan virtualservice failed", "namespace", namespace, "name", service.Name)
return err return err
} }
// delete the orphan strategy if there is any
err = v.servicemeshClient.ServicemeshV1alpha2().Strategies(namespace).Delete(name, nil)
if err != nil && !errors.IsNotFound(err) {
log.Error(err, "delete orphan strategy failed", "namespace", namespace, "name", service.Name)
return err
}
return nil return nil
} }
log.Error(err, "get service failed", "namespace", namespace, "name", name) log.Error(err, "get service failed", "namespace", namespace, "name", name)
...@@ -385,9 +393,9 @@ func (v *VirtualServiceController) syncService(key string) error { ...@@ -385,9 +393,9 @@ func (v *VirtualServiceController) syncService(key string) error {
} }
if createVirtualService { if createVirtualService {
newVirtualService, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Create(newVirtualService) _, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Create(newVirtualService)
} else { } else {
newVirtualService, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Update(newVirtualService) _, err = v.virtualServiceClient.NetworkingV1alpha3().VirtualServices(namespace).Update(newVirtualService)
} }
if err != nil { if err != nil {
......
...@@ -106,30 +106,31 @@ func GetPipelineRunNodesbyBranch(projectName, pipelineName, branchName, runId st ...@@ -106,30 +106,31 @@ func GetPipelineRunNodesbyBranch(projectName, pipelineName, branchName, runId st
return res, err return res, err
} }
func GetBranchStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId string, req *http.Request) ([]byte, error) { func GetBranchStepLog(projectName, pipelineName, branchName, runId, nodeId, stepId string, req *http.Request) ([]byte, http.Header, error) {
baseUrl := fmt.Sprintf(jenkins.Server+GetBranchStepLogUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId, stepId) baseUrl := fmt.Sprintf(jenkins.Server+GetBranchStepLogUrl+req.URL.RawQuery, projectName, pipelineName, branchName, runId, nodeId, stepId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := sendJenkinsRequest(baseUrl, req) resBody, header, err := jenkinsClient(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, nil, err
} }
return resBody, err return resBody, header, err
} }
func GetStepLog(projectName, pipelineName, runId, nodeId, stepId string, req *http.Request) ([]byte, error) { func GetStepLog(projectName, pipelineName, runId, nodeId, stepId string, req *http.Request) ([]byte, http.Header, error) {
baseUrl := fmt.Sprintf(jenkins.Server+GetStepLogUrl+req.URL.RawQuery, projectName, pipelineName, runId, nodeId, stepId) baseUrl := fmt.Sprintf(jenkins.Server+GetStepLogUrl+req.URL.RawQuery, projectName, pipelineName, runId, nodeId, stepId)
log.Infof("Jenkins-url: " + baseUrl) log.Infof("Jenkins-url: " + baseUrl)
resBody, err := sendJenkinsRequest(baseUrl, req) resBody, header, err := jenkinsClient(baseUrl, req)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, nil, err
} }
return resBody, err return resBody, header, err
} }
func Validate(scmId string, req *http.Request) ([]byte, error) { func Validate(scmId string, req *http.Request) ([]byte, error) {
...@@ -420,12 +421,19 @@ func CheckScriptCompile(req *http.Request) ([]byte, error) { ...@@ -420,12 +421,19 @@ func CheckScriptCompile(req *http.Request) ([]byte, error) {
} }
func CheckCron(req *http.Request) (*CheckCronRes, error) { func CheckCron(req *http.Request) (*CheckCronRes, error) {
baseUrl := jenkins.Server + CheckCronUrl + req.URL.RawQuery newurl, err := url.Parse(jenkins.Server + CheckCronUrl + req.URL.RawQuery)
log.Infof("Jenkins-url: " + baseUrl)
req.SetBasicAuth(jenkins.Requester.BasicAuth.Username, jenkins.Requester.BasicAuth.Password) reqJenkins := &http.Request{
Method: http.MethodGet,
URL: newurl,
Header: http.Header{},
}
var res = new(CheckCronRes) var res = new(CheckCronRes)
client := &http.Client{Timeout: 30 * time.Second}
resp, err := http.Get(baseUrl) reqJenkins.SetBasicAuth(jenkins.Requester.BasicAuth.Username, jenkins.Requester.BasicAuth.Password)
resp, err := client.Do(reqJenkins)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return res, err return res, err
...@@ -658,10 +666,15 @@ func GetNodesDetail(projectName, pipelineName, runId string, req *http.Request) ...@@ -658,10 +666,15 @@ func GetNodesDetail(projectName, pipelineName, runId string, req *http.Request)
// create jenkins request // create jenkins request
func sendJenkinsRequest(baseUrl string, req *http.Request) ([]byte, error) { func sendJenkinsRequest(baseUrl string, req *http.Request) ([]byte, error) {
resBody, _, err := jenkinsClient(baseUrl, req)
return resBody, err
}
func jenkinsClient(baseUrl string, req *http.Request) ([]byte, http.Header, error) {
newReqUrl, err := url.Parse(baseUrl) newReqUrl, err := url.Parse(baseUrl)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, nil, err
} }
client := &http.Client{Timeout: 30 * time.Second} client := &http.Client{Timeout: 30 * time.Second}
...@@ -678,19 +691,21 @@ func sendJenkinsRequest(baseUrl string, req *http.Request) ([]byte, error) { ...@@ -678,19 +691,21 @@ func sendJenkinsRequest(baseUrl string, req *http.Request) ([]byte, error) {
resp, err := client.Do(newRequest) resp, err := client.Do(newRequest)
if err != nil { if err != nil {
log.Error(err) log.Error(err)
return nil, err return nil, nil, err
} }
defer resp.Body.Close()
resBody, _ := getRespBody(resp) resBody, _ := getRespBody(resp)
defer resp.Body.Close()
if resp.StatusCode >= http.StatusBadRequest { if resp.StatusCode >= http.StatusBadRequest {
jkerr := new(JkError) jkerr := new(JkError)
jkerr.Code = resp.StatusCode jkerr.Code = resp.StatusCode
jkerr.Message = http.StatusText(resp.StatusCode) jkerr.Message = http.StatusText(resp.StatusCode)
return nil, jkerr return nil, nil, jkerr
} }
return resBody, err return resBody, resp.Header, nil
} }
// Decompress response.body of JenkinsAPIResponse // Decompress response.body of JenkinsAPIResponse
......
...@@ -19,43 +19,45 @@ package devops ...@@ -19,43 +19,45 @@ package devops
// Some apis for Jenkins. // Some apis for Jenkins.
const ( const (
GetPipeBranchUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/?" GetPipeBranchUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/?"
GetBranchPipeUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/" GetBranchPipeUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/"
GetPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/" GetPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/"
SearchPipelineUrl = "/blue/rest/search/?" SearchPipelineUrl = "/blue/rest/search/?"
RunBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/" RunBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/"
RunPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/" RunPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/"
GetPipelineRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/" GetPipelineRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/"
GetPipeBranchRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/" GetPipeBranchRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/"
SearchPipelineRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/?" SearchPipelineRunUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/?"
GetBranchPipeRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/?" GetBranchPipeRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/?"
GetPipeRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/nodes/?" GetPipeRunNodesUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/?"
GetBranchRunLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/log/?" GetBranchRunLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/log/?"
GetRunLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/log/?" GetRunLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/log/?"
GetBranchStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/%s/log/?" GetBranchStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/%s/log/?"
GetStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/nodes/%s/steps/%s/log/?" GetStepLogUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/%s/steps/%s/log/?"
StopBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/stop/?" StopBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/stop/?"
StopPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/stop/?" StopPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/stop/?"
ReplayBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/replay/" ReplayBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/replay/"
ReplayPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/replay/" ReplayPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/replay/"
GetBranchArtifactsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/artifacts/?" GetBranchArtifactsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/artifacts/?"
GetArtifactsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/artifacts/?" GetArtifactsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/artifacts/?"
GetBranchStepsStatusUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/?" GetBranchStepsStatusUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/?"
GetStepsStatusUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/nodes/%s/steps/?"
CheckBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/%s/" GetStepsStatusUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/%s/steps/?"
CheckPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/%s/steps/%s/"
GetBranchNodeStepsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/branches/%s/runs/%s/nodes/%s/steps/?" CheckBranchPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/%s/"
GetNodeStepsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/%s/runs/%s/nodes/%s/steps/?" CheckPipelineUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/%s/steps/%s/"
ValidateUrl = "/blue/rest/organizations/jenkins/scm/%s/validate" GetBranchNodeStepsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/branches/%s/runs/%s/nodes/%s/steps/?"
GetSCMOrgUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/?" GetNodeStepsUrl = "/blue/rest/organizations/jenkins/pipelines/%s/pipelines/%s/runs/%s/nodes/%s/steps/?"
GetOrgRepoUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/%s/repositories/?" ValidateUrl = "/blue/rest/organizations/jenkins/scm/%s/validate"
GetConsoleLogUrl = "/job/%s/job/%s/indexing/consoleText" GetSCMOrgUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/?"
ScanBranchUrl = "/job/%s/job/%s/build?" GetOrgRepoUrl = "/blue/rest/organizations/jenkins/scm/%s/organizations/%s/repositories/?"
GetCrumbUrl = "/crumbIssuer/api/json/" GetConsoleLogUrl = "/job/%s/job/%s/indexing/consoleText"
CheckScriptCompileUrl = "/job/init-job/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile" ScanBranchUrl = "/job/%s/job/%s/build?"
CheckCronUrl = "/job/init-job/descriptorByName/hudson.triggers.TimerTrigger/checkSpec?" GetCrumbUrl = "/crumbIssuer/api/json/"
ToJenkinsfileUrl = "/pipeline-model-converter/toJenkinsfile" CheckScriptCompileUrl = "/job/init-job/descriptorByName/org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition/checkScriptCompile"
ToJsonUrl = "/pipeline-model-converter/toJson" CheckCronUrl = "/job/init-job/descriptorByName/hudson.triggers.TimerTrigger/checkSpec?"
GetNotifyCommitUrl = "/git/notifyCommit/?" ToJenkinsfileUrl = "/pipeline-model-converter/toJenkinsfile"
GithubWebhookUrl = "/github-webhook/" ToJsonUrl = "/pipeline-model-converter/toJson"
GetNotifyCommitUrl = "/git/notifyCommit/?"
GithubWebhookUrl = "/github-webhook/"
) )
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册