|
|
@@ -35,6 +35,7 @@ import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static cn.seecoder.web.core.pipeline.template.PipelineTemplateTable.MYSQL;
|
|
|
+import static cn.seecoder.web.core.pipeline.template.PipelineTemplateTable.SONAR_JAVA8;
|
|
|
|
|
|
/**
|
|
|
* @author PuHong Weng
|
|
|
@@ -70,28 +71,27 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
public List<DeploymentInfoVO> retrieveDeploymentInfos(Integer projectId) throws AccessDeniedException {
|
|
|
//projectAuthentication(projectId);
|
|
|
List<PipelinePO> pipelines = pipelineMapper.selectByProjectId(projectId);
|
|
|
- if (pipelines.size()==0){
|
|
|
+ if (pipelines.size() == 0) {
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
List<Integer> pipelineIds = pipelines.stream().map(PipelinePO::getId).collect(Collectors.toList());
|
|
|
List<DeploymentPO> deployments = deploymentMapper.selectByPipelineIds(pipelineIds);
|
|
|
- return deployments.stream().map(x->{
|
|
|
- PipelineInspector inspector = PipelineInspectorFactory.init(x.getNamespace(),x.getDeployName());
|
|
|
+ return deployments.stream().map(x -> {
|
|
|
+ PipelineInspector inspector = PipelineInspectorFactory.init(x.getNamespace(), x.getDeployName());
|
|
|
//获取状态
|
|
|
String status = null;
|
|
|
V1DeploymentStatus deploymentStatus = inspector.inspectStatus();
|
|
|
- if (deploymentStatus == null){
|
|
|
+ if (deploymentStatus == null) {
|
|
|
status = "部署不存在,请重新部署";
|
|
|
- }
|
|
|
- else if(deploymentStatus.getAvailableReplicas()!=null && deploymentStatus.getAvailableReplicas()>=1){
|
|
|
+ } else if (deploymentStatus.getAvailableReplicas() != null && deploymentStatus.getAvailableReplicas() >= 1) {
|
|
|
status = "正常运行";
|
|
|
- } else{
|
|
|
+ } else {
|
|
|
status = "不可用";
|
|
|
}
|
|
|
return DeploymentInfoVO.builder()
|
|
|
.id(x.getId())
|
|
|
.pipelineId(x.getPipelineId())
|
|
|
- .name(x.getDeployName()+"."+x.getNamespace())
|
|
|
+ .name(x.getDeployName() + "." + x.getNamespace())
|
|
|
.deployedTime(x.getDeployedTime())
|
|
|
.accessUrl(x.getAccessUrl())
|
|
|
.status(status)
|
|
|
@@ -115,31 +115,41 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
.build();
|
|
|
pipelineRecordMapper.insert(record);
|
|
|
|
|
|
+ // 有一些流水线是不产生部署产物的
|
|
|
+ boolean hasDeployment = true;
|
|
|
+ switch (pipelinePO.getTemplateName()) {
|
|
|
+ case SONAR_JAVA8:
|
|
|
+ hasDeployment = false;
|
|
|
+ default:
|
|
|
+ }
|
|
|
|
|
|
- DeploymentPO deployment = deploymentMapper.selectByPipelineId(pipelineId);
|
|
|
- if (deployment == null){
|
|
|
- //第一次部署
|
|
|
- String accessUrl;
|
|
|
- //根据模板类型设置起的访问路径
|
|
|
- switch (pipelinePO.getTemplateName()){
|
|
|
- case MYSQL:
|
|
|
- //集群无法暴露tcp端口,只提供了集群内部访问的url
|
|
|
- accessUrl = pipelinePO.getName() + K8sConstants.SERVICE_SUFFIX+"."+projectPO.getUniqueK8sNamespace() +".svc.cluster.local";
|
|
|
- break;
|
|
|
- default:
|
|
|
- accessUrl = pipelinePO.getName()+"."+projectPO.getUniqueK8sNamespace()+ properties.getK8s().getIngressHostSuffix();
|
|
|
- break;
|
|
|
+ // 部署产物记录
|
|
|
+ if (hasDeployment) {
|
|
|
+ DeploymentPO deployment = deploymentMapper.selectByPipelineId(pipelineId);
|
|
|
+ if (deployment == null) {
|
|
|
+ //第一次部署
|
|
|
+ String accessUrl;
|
|
|
+ //根据模板类型设置起的访问路径
|
|
|
+ switch (pipelinePO.getTemplateName()) {
|
|
|
+ case MYSQL:
|
|
|
+ //集群无法暴露tcp端口,只提供了集群内部访问的url
|
|
|
+ accessUrl = pipelinePO.getName() + K8sConstants.SERVICE_SUFFIX + "." + projectPO.getUniqueK8sNamespace() + ".svc.cluster.local";
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ accessUrl = pipelinePO.getName() + "." + projectPO.getUniqueK8sNamespace() + properties.getK8s().getIngressHostSuffix();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ deploymentMapper.insert(DeploymentPO.builder()
|
|
|
+ .namespace(projectPO.getUniqueK8sNamespace())
|
|
|
+ .deployName(pipelinePO.getName())
|
|
|
+ .accessUrl(accessUrl)
|
|
|
+ .pipelineId(pipelineId)
|
|
|
+ .deployedTime(record.getStartTime())
|
|
|
+ .build());
|
|
|
+ } else {
|
|
|
+ deployment.setDeployedTime(record.getStartTime());
|
|
|
+ deploymentMapper.update(deployment);
|
|
|
}
|
|
|
- deploymentMapper.insert(DeploymentPO.builder()
|
|
|
- .namespace(projectPO.getUniqueK8sNamespace())
|
|
|
- .deployName(pipelinePO.getName())
|
|
|
- .accessUrl(accessUrl)
|
|
|
- .pipelineId(pipelineId)
|
|
|
- .deployedTime(record.getStartTime())
|
|
|
- .build());
|
|
|
- } else {
|
|
|
- deployment.setDeployedTime(record.getStartTime());
|
|
|
- deploymentMapper.update(deployment);
|
|
|
}
|
|
|
|
|
|
Pipeline pipeline = null;
|
|
|
@@ -153,12 +163,12 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
record.setResult(PipelineRecordPO.DEPLOY_FAIL);
|
|
|
record.setDetails(pipeline.getContext().getResult());
|
|
|
log.error("流水线配置转换发生错误");
|
|
|
- throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"应用部署失败",e);
|
|
|
- } catch (RuntimeException e){
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "应用部署失败", e);
|
|
|
+ } catch (RuntimeException e) {
|
|
|
pipeline.getContext().appendErrorResult("运行时错误: ", e);
|
|
|
record.setResult(PipelineRecordPO.DEPLOY_FAIL);
|
|
|
record.setDetails(pipeline.getContext().getResult());
|
|
|
- throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"应用部署失败",e);
|
|
|
+ throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR, "应用部署失败", e);
|
|
|
} finally {
|
|
|
pipelineRecordMapper.update(record);
|
|
|
}
|
|
|
@@ -166,19 +176,20 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
List<Integer> pipelineIds = new ArrayList<>();
|
|
|
pipelineIds.add(pipelineId);
|
|
|
PipelineRecordPO pipelineRecordPO = pipelineRecordMapper.selectPipelinesLatestRecord(pipelineIds);
|
|
|
- try{
|
|
|
+ try {
|
|
|
JSONObject object = new JSONObject();
|
|
|
- object.put("project_id",projectId);
|
|
|
- object.put("record_id",pipelineRecordPO.getId());
|
|
|
- object.put("pipeline_id",pipelineId);
|
|
|
- object.put("user_id",userId);
|
|
|
- object.put("type",record.getResult());
|
|
|
+ object.put("project_id", projectId);
|
|
|
+ object.put("record_id", pipelineRecordPO.getId());
|
|
|
+ object.put("pipeline_id", pipelineId);
|
|
|
+ object.put("user_id", userId);
|
|
|
+ object.put("type", record.getResult());
|
|
|
object.put("result", record.getResult());
|
|
|
- object.put("success",record.getResult().equals(PipelineRecordPO.DEPLOY_SUCCESS));
|
|
|
+ object.put("success", record.getResult().equals(PipelineRecordPO.DEPLOY_SUCCESS));
|
|
|
//success?
|
|
|
String data = JSONObject.toJSONString(object);
|
|
|
LogTrackingUtil.log(data, OpType.DEPLOY_PIPELINE);
|
|
|
- }catch (Exception e){}
|
|
|
+ } catch (Exception e) {
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -187,7 +198,7 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
//projectAuthentication(projectId);
|
|
|
DeploymentPO deployment = deploymentMapper.selectByPipelineId(pipelineId);
|
|
|
deploymentMapper.delete(pipelineId);
|
|
|
- PipelineInspector inspector = PipelineInspectorFactory.init(deployment.getNamespace(),deployment.getDeployName());
|
|
|
+ PipelineInspector inspector = PipelineInspectorFactory.init(deployment.getNamespace(), deployment.getDeployName());
|
|
|
inspector.delete();
|
|
|
|
|
|
}
|
|
|
@@ -195,7 +206,7 @@ public class DeploymentServiceImpl implements DeploymentService {
|
|
|
@Override
|
|
|
public String log(Integer projectId, Integer pipelineId) {
|
|
|
DeploymentPO deployment = deploymentMapper.selectByPipelineId(pipelineId);
|
|
|
- PipelineInspector inspector = PipelineInspectorFactory.init(deployment.getNamespace(),deployment.getDeployName());
|
|
|
+ PipelineInspector inspector = PipelineInspectorFactory.init(deployment.getNamespace(), deployment.getDeployName());
|
|
|
return inspector.log();
|
|
|
}
|
|
|
}
|