Parcourir la source

feat: 同步gitlab项目信息,不再由此后端创建gitlab用户

370774330@qq.com il y a 5 ans
Parent
commit
b5e04696e1

+ 1 - 0
web/src/main/java/seecoder/devcloud/web/controller/user/UserController.java

@@ -28,6 +28,7 @@ public class UserController {
         this.userService = userService;
     }
 
+    @Deprecated
     @ApiOperation(value = "创建gitlab用户", httpMethod = "POST")
     @PostMapping("/gitlab")
     @ApiImplicitParam(value = "vo",dataType = "object", paramType = "body")

+ 4 - 4
web/src/main/java/seecoder/devcloud/web/dao/pipeline/PipelineHistoryMapper.java

@@ -1,9 +1,6 @@
 package seecoder.devcloud.web.dao.pipeline;
 
-import org.apache.ibatis.annotations.InsertProvider;
-import org.apache.ibatis.annotations.Options;
-import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.*;
 import org.springframework.stereotype.Repository;
 import seecoder.devcloud.web.dao.provider.GeneralInsertUpdateSqlProvider;
 import seecoder.devcloud.web.model.po.pipeline.PipelineHistoryPO;
@@ -22,6 +19,9 @@ public interface PipelineHistoryMapper {
     @Options(useGeneratedKeys = true, keyProperty = "param1.id", keyColumn = "id")
     void insert(PipelineHistoryPO pipelineHistoryPO, String... ignoredCols);
 
+    @UpdateProvider(type= GeneralInsertUpdateSqlProvider.class, method="updateById")
+    int update(PipelineHistoryPO pipelineHistoryPO);
+
 
     @Select("select * from pipeline_history where pipeline_id = #{pipelineId}")
     List<PipelineHistoryPO> selectByPipelineId(Integer pipelineId);

+ 14 - 0
web/src/main/java/seecoder/devcloud/web/model/po/project/ProjectPO.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.web.model.po.project;
 
+import com.nju.edu.gitlab.vo.ProjectVO;
 import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
@@ -21,5 +22,18 @@ public class ProjectPO {
     private String gitRemoteUrl;
     private String description;
 
+    public ProjectPO(ProjectVO vo) {
+        id = vo.getProjectId();
+        name = vo.getProjectName();
+        gitRemoteUrl = vo.getWebUrl();
+        description = "";
 
+    }
+
+    /**
+     * 学生的项目名可能时一致的,所以部署到k8s中时,需要一个id进行区分
+     */
+    public String getUniqueK8sNamespace(){
+        return name+'-'+id;
+    }
 }

+ 2 - 1
web/src/main/java/seecoder/devcloud/web/model/vo/user/UserVO.java

@@ -24,7 +24,8 @@ public class UserVO {
     private String email;
     @ApiModelProperty("角色")
     private UserIdentity role;
-    @ApiModelProperty("是否有对应gitlab账户了, true代表有")
+    @Deprecated
+    @ApiModelProperty("<已过期,先不要管这个字段>是否有对应gitlab账户了, true代表有")
     private boolean withGitlab;
 
     public UserVO(UserPO userPO) {

+ 2 - 0
web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/DeploymentServiceImpl.java

@@ -116,6 +116,8 @@ public class DeploymentServiceImpl implements DeploymentService {
             history.setResult("部署失败");
             history.setDetails(pipeline.getContext().getResult());
             throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"应用部署失败",pipelineException);
+        } finally {
+            pipelineHistoryMapper.update(history);
         }
 
     }

+ 8 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/PipelineServiceImpl.java

@@ -5,6 +5,8 @@ import org.springframework.stereotype.Service;
 import seecoder.devcloud.common.exceptions.AccessDeniedException;
 import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.core.pipeline.PipelineException;
+import seecoder.devcloud.core.pipeline.inspector.PipelineInspector;
+import seecoder.devcloud.core.pipeline.inspector.PipelineInspectorFactory;
 import seecoder.devcloud.core.pipeline.template.PipelineTemplateTable;
 import seecoder.devcloud.web.dao.pipeline.PipelineHistoryMapper;
 import seecoder.devcloud.web.dao.pipeline.PipelineMapper;
@@ -12,6 +14,7 @@ import seecoder.devcloud.web.dao.project.ProjectMapper;
 import seecoder.devcloud.web.dao.user.UserMapper;
 import seecoder.devcloud.web.model.po.pipeline.PipelineHistoryPO;
 import seecoder.devcloud.web.model.po.pipeline.PipelinePO;
+import seecoder.devcloud.web.model.po.project.ProjectPO;
 import seecoder.devcloud.web.model.po.user.UserPO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineConfigVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineCreateVO;
@@ -108,8 +111,12 @@ public class PipelineServiceImpl implements PipelineService {
     @Override
     public void deletePipelineConfig(Integer projectId, Integer pipelineId) throws AccessDeniedException {
         //projectAuthentication(projectId);
+        ProjectPO projectPO = projectMapper.getProjectById(projectId);
+        PipelinePO pipelinePO = pipelineMapper.selectById(pipelineId);
+        PipelineInspector inspector = PipelineInspectorFactory.init(projectPO.getUniqueK8sNamespace(), pipelinePO.getName(),pipelinePO.getId(),pipelinePO.getTemplateName());
+        inspector.delete();
         pipelineMapper.delete(pipelineId);
-        //todo 部署要不要删
+
     }
 
     @Override

+ 13 - 28
web/src/main/java/seecoder/devcloud/web/service/impl/project/ProjectServiceImpl.java

@@ -13,7 +13,6 @@ import seecoder.devcloud.common.exceptions.ServiceException;
 import seecoder.devcloud.web.dao.project.ProjectMapper;
 import seecoder.devcloud.web.dao.user.UserMapper;
 import seecoder.devcloud.web.model.po.project.ProjectPO;
-import seecoder.devcloud.web.model.po.user.UserPO;
 import seecoder.devcloud.web.model.vo.project.ProjectCreateVO;
 import seecoder.devcloud.web.model.vo.project.ProjectVO;
 import seecoder.devcloud.web.model.vo.user.UserVO;
@@ -43,15 +42,24 @@ public class ProjectServiceImpl implements ProjectService {
     }
 
     @Override
-    // TODO:该方法待测试
     public List<ProjectVO> listProjectsByUserId() throws ServiceException {
         int userId = UserService.loginUser().getId();
-        List<com.nju.edu.gitlab.vo.ProjectVO> projects = null;
+        List<com.nju.edu.gitlab.vo.ProjectVO> projects;
         try {
             projects = seecoderGitlabApi.getAllProjectsByUserId(userId);
         } catch (SeecoderGitlabException e) {
             throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"获取项目列表失败",e);
         }
+        //同步数据,有可能gitlab那边有的项目我们这边没有
+        List<ProjectPO> pos = projects.stream().filter(x->projectMapper.getProjectById(x.getProjectId())==null).map(ProjectPO::new).collect(Collectors.toList());
+        if (pos.size() != 0){
+            //todo 查下mybatis 批量插入方式
+            for (ProjectPO po : pos){
+                projectMapper.insertProject(po);
+            }
+        }
+
+
         List<Integer> projectIds = projects.stream().map(com.nju.edu.gitlab.vo.ProjectVO::getProjectId).collect(Collectors.toList());
         return projectMapper.selectByIds(projectIds).stream().map(ProjectVO::new).collect(Collectors.toList());
     }
@@ -67,7 +75,7 @@ public class ProjectServiceImpl implements ProjectService {
         ProjectPO po = new ProjectPO();
         BeanUtils.copyProperties(vo,po);
         try {
-            com.nju.edu.gitlab.vo.ProjectVO project = seecoderGitlabApi.createProject(po.getName(), VisibilityForm.PRIVATE);
+            com.nju.edu.gitlab.vo.ProjectVO project = seecoderGitlabApi.createPrivateProject(po.getName(), VisibilityForm.PRIVATE,UserService.loginUser().getId());
             po.setId(project.getProjectId());
             po.setGitRemoteUrl(project.getWebUrl());
         } catch (SeecoderGitlabException e) {
@@ -94,7 +102,7 @@ public class ProjectServiceImpl implements ProjectService {
 
     @Override
     public List<UserVO> getProjectMembers(Integer projectId) throws ServiceException {
-        List<Integer> userIds = null;
+        List<Integer> userIds;
         try {
             userIds = seecoderGitlabApi.getJoinedUserByProject(projectId);
         } catch (SeecoderGitlabException e) {
@@ -107,27 +115,4 @@ public class ProjectServiceImpl implements ProjectService {
     public void deleteProject(int projectId) {
         //TODO:不知道该怎么做,懒删除?还是直接删? 暂时不提供
     }
-
-    @Override
-    public void refresh() throws ServiceException {
-        UserPO user = UserService.loginUser();
-        List<com.nju.edu.gitlab.vo.ProjectVO> projects = null;
-        try {
-            projects = seecoderGitlabApi.getAllProjectsByUserId(user.getId());
-        } catch (SeecoderGitlabException e) {
-            throw new ServiceException(HttpStatus.SC_INTERNAL_SERVER_ERROR,"获取项目列表失败",e);
-        }
-        for (com.nju.edu.gitlab.vo.ProjectVO p : projects){
-            if (projectMapper.getProjectById(p.getProjectId())==null){
-                ProjectPO po = new ProjectPO();
-                po.setId(p.getProjectId());
-                po.setGitRemoteUrl(p.getWebUrl());
-                po.setDescription("");
-                //todo 项目名待返回
-                projectMapper.insertProject(po);
-            }
-
-        }
-
-    }
 }

+ 0 - 2
web/src/main/java/seecoder/devcloud/web/service/project/ProjectService.java

@@ -39,6 +39,4 @@ public interface ProjectService {
 
     List<UserVO> getProjectMembers(Integer projectId) throws ServiceException;
 
-    void refresh() throws ServiceException;
-    //todo refresh 同步软工二信息
 }