Explorar el Código

feat: pipeline 实现

370774330@qq.com hace 5 años
padre
commit
35c730a2bc
Se han modificado 19 ficheros con 316 adiciones y 29 borrados
  1. 3 0
      common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java
  2. 23 8
      web/src/main/java/seecoder/devcloud/web/controller/pipeline/PipelineController.java
  3. 7 5
      web/src/main/java/seecoder/devcloud/web/controller/user/UserController.java
  4. 34 0
      web/src/main/java/seecoder/devcloud/web/dao/pipeline/PipelineHistoryMapper.java
  5. 39 0
      web/src/main/java/seecoder/devcloud/web/dao/pipeline/PipelineMapper.java
  6. 2 0
      web/src/main/java/seecoder/devcloud/web/model/po/pipeline/Pipeline.java
  7. 3 0
      web/src/main/java/seecoder/devcloud/web/model/po/pipeline/PipelineHistory.java
  8. 32 0
      web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/DeploymentInfoVO.java
  9. 10 0
      web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineConfigVO.java
  10. 22 0
      web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineCreateVO.java
  11. 19 2
      web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineHistoryVO.java
  12. 26 2
      web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineInfoVO.java
  13. 6 2
      web/src/main/java/seecoder/devcloud/web/model/vo/user/UserVO.java
  14. 5 1
      web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/DeploymentServiceImpl.java
  15. 60 5
      web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/PipelineServiceImpl.java
  16. 15 2
      web/src/main/java/seecoder/devcloud/web/service/impl/user/UserServiceImpl.java
  17. 5 1
      web/src/main/java/seecoder/devcloud/web/service/pipeline/DeploymentService.java
  18. 2 1
      web/src/main/java/seecoder/devcloud/web/service/pipeline/PipelineService.java
  19. 3 0
      web/src/main/java/seecoder/devcloud/web/service/user/UserService.java

+ 3 - 0
common/src/main/java/seecoder/devcloud/common/util/JwtTokenUtil.java

@@ -41,6 +41,9 @@ public class JwtTokenUtil {
 
     private Long expiration;
 
+    /**
+     * 使用自己方法判断超时是为了后端可以在 小于等于门户过期时间的范围内,自由调控过期时间
+     */
     public Boolean isTokenExpired(String token) {
         try {
             Claims claims = getClaimsFromToken(token);

+ 23 - 8
web/src/main/java/seecoder/devcloud/web/controller/pipeline/PipelineController.java

@@ -1,11 +1,15 @@
 package seecoder.devcloud.web.controller.pipeline;
 
+import org.apache.ibatis.annotations.Delete;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 import seecoder.devcloud.web.model.vo.Response;
+import seecoder.devcloud.web.model.vo.pipeline.PipelineCreateVO;
 import seecoder.devcloud.web.service.pipeline.PipelineService;
 
+import javax.ws.rs.GET;
+import javax.ws.rs.PUT;
+
 /**
  * @author PuHong Weng
  * @date 2021/3/11
@@ -25,14 +29,17 @@ public class PipelineController {
     /**
      * 获取一个项目所有的流水线信息
      */
-    public Response retrievePipelineInfos(Integer projectId){
+    @GetMapping("/list")
+    public Response retrievePipelineInfos(@RequestParam("projectId") Integer projectId){
         return Response.buildSuccess(pipelineService.retrievePipelineInfos(projectId));
     }
 
     /**
      * 获取指定一条流水线的配置json信息
      */
-    public Response retrievePipelineConfig(Integer projectId, Integer pipelineId){
+    @GetMapping
+    public Response retrievePipelineConfig(@RequestParam("projectId")Integer projectId,
+                                           @RequestParam("pipelineId")Integer pipelineId){
 
         return Response.buildSuccess(pipelineService.retrievePipelineConfig(projectId, pipelineId));
     }
@@ -40,22 +47,29 @@ public class PipelineController {
     /**
      * 获取指定一条流水线的历史构建信息
      */
-    public Response retrievePipelineHistory(Integer projectId, Integer pipelineId){
+    @GetMapping("/history/list")
+    public Response retrievePipelineHistory(@RequestParam("projectId")Integer projectId,
+                                            @RequestParam("pipelineId")Integer pipelineId){
         return Response.buildSuccess(pipelineService.retrievePipelineHistory(projectId,pipelineId));
     }
 
     /**
      * 依据模板创建一个流水线配置
      */
-    public Response createPipelineConfig(Integer projectId,Integer pipelineId, String templateName){
-        pipelineService.createPipelineConfig(projectId,pipelineId,templateName);
+    @PostMapping
+    public Response createPipelineConfig(@RequestBody PipelineCreateVO pipelineCreateVO){
+        pipelineService.createPipelineConfig(pipelineCreateVO);
         return Response.buildSuccess();
     }
 
     /**
      * 保存一条流水线的配置json信息
      */
-    public Response savePipelineConfig(Integer projectId,Integer pipelineId, String configJson){
+    @PutMapping("/config")
+    public Response savePipelineConfig(@RequestParam("projectId")Integer projectId,
+                                       @RequestParam("pipelineId")Integer pipelineId,
+                                       @RequestParam("configJson")String configJson){
+        //todo 验证configJson有效性
         pipelineService.savePipelineConfig(projectId,pipelineId, configJson);
         return Response.buildSuccess();
     }
@@ -63,6 +77,7 @@ public class PipelineController {
     /**
      * 删除一条流水线
      */
+    @DeleteMapping
     public Response deletePipelineInfo(Integer projectId,Integer pipelineId){
         pipelineService.deletePipelineConfig(projectId, pipelineId);
         return Response.buildSuccess();

+ 7 - 5
web/src/main/java/seecoder/devcloud/web/controller/user/UserController.java

@@ -2,6 +2,9 @@ package seecoder.devcloud.web.controller.user;
 
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
+import seecoder.devcloud.web.model.po.user.User;
+import seecoder.devcloud.web.model.vo.Response;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 import seecoder.devcloud.web.service.user.UserService;
 
 /**
@@ -20,10 +23,9 @@ public class UserController {
         this.userService = userService;
     }
 
-//    @GetMapping("/id")
-//    public Response<UserVO> findUserById(
-//            @RequestParam("userId") Integer userId){
-//        return Response.ok(userService.getUserById(userId));
-//    }
+    @GetMapping()
+    public Response getLoginUser(){
+        return Response.buildSuccess(userService.getLoginUser());
+    }
 
 }

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

@@ -0,0 +1,34 @@
+package seecoder.devcloud.web.dao.pipeline;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import seecoder.devcloud.web.model.po.pipeline.PipelineHistory;
+
+import java.util.List;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/3/12
+ * @description:
+ */
+@Mapper
+public interface PipelineHistoryMapper {
+
+    @Select("select * from pipeline_history where pipeline_id = #{pipelineId}")
+    List<PipelineHistory> selectByPipelineId(Integer pipelineId);
+
+
+    /**
+     * 获取一个项目里所有流水线配置的最新构建历史
+     */
+    @Select("SELECT *" +
+            "FROM   pipeline_history" +
+            "WHERE  startTime=" +
+            "(  SELECT MAX(startTime) " +
+            "   FROM pipeline_history" +
+            "   WHERE pipeline_id in" +
+            "   <foreach collection='pipelineIds' open='(' item='pipelineId' separator=',' close=')'> #{pipelineId}</foreach>" +
+            "   )")
+    List<PipelineHistory> selectRecentlyHistoryBy(List<Integer> pipelineIds);
+
+}

+ 39 - 0
web/src/main/java/seecoder/devcloud/web/dao/pipeline/PipelineMapper.java

@@ -0,0 +1,39 @@
+package seecoder.devcloud.web.dao.pipeline;
+
+import org.apache.ibatis.annotations.*;
+import seecoder.devcloud.web.dao.provider.GeneralInsertUpdateSqlProvider;
+import seecoder.devcloud.web.model.po.pipeline.Pipeline;
+import seecoder.devcloud.web.model.po.user.Group;
+
+import java.util.List;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/3/12
+ * @description:
+ */
+@Mapper
+public interface PipelineMapper {
+
+    @InsertProvider(type = GeneralInsertUpdateSqlProvider.class, method = "insert")
+    @Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
+    boolean insert(Pipeline pipeline, String... ignoredCols);
+
+    @Select("select * from pipeline where id = #{id}")
+    Pipeline selectById(Integer id);
+
+    @Select("select * from pipeline where project_id = #{id}")
+    List<Pipeline> selectByProjectId(Integer id);
+
+    /**
+     * 不级联删除历史构建信息以留档
+     */
+    @Delete("delete from pipeline where id = #{id}")
+    boolean delete(Integer id);
+
+    @Update("update pipeline set config_json = #{configJson} where id = #{id}")
+    boolean updateConfigJson(@Param("id") Integer id,@Param("configJson") String configJson);
+
+
+
+}

+ 2 - 0
web/src/main/java/seecoder/devcloud/web/model/po/pipeline/Pipeline.java

@@ -1,5 +1,6 @@
 package seecoder.devcloud.web.model.po.pipeline;
 
+import lombok.Builder;
 import lombok.Data;
 
 /**
@@ -8,6 +9,7 @@ import lombok.Data;
  * @description:
  */
 @Data
+@Builder
 public class Pipeline {
 
 

+ 3 - 0
web/src/main/java/seecoder/devcloud/web/model/po/pipeline/PipelineHistory.java

@@ -1,5 +1,7 @@
 package seecoder.devcloud.web.model.po.pipeline;
 
+import lombok.Data;
+
 import java.sql.Timestamp;
 
 /**
@@ -7,6 +9,7 @@ import java.sql.Timestamp;
  * @date 2021/3/11
  * @description:
  */
+@Data
 public class PipelineHistory {
 
     /**

+ 32 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/DeploymentInfoVO.java

@@ -1,9 +1,41 @@
 package seecoder.devcloud.web.model.vo.pipeline;
 
+import lombok.Data;
+
+import java.sql.Timestamp;
+
 /**
  * @author PuHong Weng
  * @date 2021/3/11
  * @description:
  */
+@Data
 public class DeploymentInfoVO {
+
+    Integer id;
+
+    /**
+     * 对应关联的流水线 todo sql外键
+     */
+    Integer pipelineId;
+
+    /**
+     * 部署的项目名称
+     */
+    String name;
+
+    /**
+     * 最新一次部署时间
+     */
+    Timestamp deployedTime;
+
+    /**
+     * 访问的url地址
+     */
+    String accessUrl;
+
+    /**
+     * 实例状态
+     */
+    String status;
 }

+ 10 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineConfigVO.java

@@ -1,14 +1,24 @@
 package seecoder.devcloud.web.model.vo.pipeline;
 
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import seecoder.devcloud.web.model.po.pipeline.Pipeline;
+
 /**
  * @author PuHong Weng
  * @date 2021/3/11
  * @description:
  */
+@Data
 public class PipelineConfigVO {
 
 
     Integer id;
 
     String configJson;
+
+
+    public PipelineConfigVO(Pipeline pipeline){
+        BeanUtils.copyProperties(pipeline,this);
+    }
 }

+ 22 - 0
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineCreateVO.java

@@ -0,0 +1,22 @@
+package seecoder.devcloud.web.model.vo.pipeline;
+
+import lombok.Data;
+
+import javax.validation.Valid;
+
+/**
+ * @author PuHong Weng
+ * @date 2021/3/12
+ * @description:
+ */
+@Data
+public class PipelineCreateVO {
+
+    private Integer projectId;
+
+    private Integer pipelineId;
+
+    private String name;
+
+    private String templateName;
+}

+ 19 - 2
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineHistoryVO.java

@@ -1,5 +1,10 @@
 package seecoder.devcloud.web.model.vo.pipeline;
 
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import seecoder.devcloud.web.model.po.pipeline.PipelineHistory;
+
 import java.sql.Timestamp;
 
 /**
@@ -7,13 +12,15 @@ import java.sql.Timestamp;
  * @date 2021/3/11
  * @description:
  */
+@Data
+@NoArgsConstructor
 public class PipelineHistoryVO {
     Integer id;
 
     /**
      * 执行开始的时间
      */
-    Timestamp executionTime;
+    Timestamp startTime;
 
     /**
      * 发起执行流水线的人
@@ -21,7 +28,17 @@ public class PipelineHistoryVO {
     String username;
 
     /**
-     * 执行结果 todo
+     * 执行结果
      */
     String result;
+
+    /**
+     * 执行结
+     */
+    String details;
+
+
+    public PipelineHistoryVO(PipelineHistory history){
+        BeanUtils.copyProperties(history,this);
+    }
 }

+ 26 - 2
web/src/main/java/seecoder/devcloud/web/model/vo/pipeline/PipelineInfoVO.java

@@ -1,5 +1,10 @@
 package seecoder.devcloud.web.model.vo.pipeline;
 
+import lombok.Builder;
+import lombok.Data;
+import seecoder.devcloud.web.model.po.pipeline.Pipeline;
+import seecoder.devcloud.web.model.po.pipeline.PipelineHistory;
+
 import java.sql.Timestamp;
 
 /**
@@ -7,8 +12,13 @@ import java.sql.Timestamp;
  * @date 2021/3/11
  * @description:
  */
+@Data
+@Builder
 public class PipelineInfoVO {
 
+    /**
+     * 流水线id
+     */
     Integer id;
 
     String name;
@@ -16,7 +26,7 @@ public class PipelineInfoVO {
     /**
      * 最后执行开始的时间
      */
-    Timestamp executionTime;
+    Timestamp startTime;
 
     /**
      * 最后发起执行流水线的人
@@ -24,7 +34,21 @@ public class PipelineInfoVO {
     String username;
 
     /**
-     * 最后的执行结果 todo
+     * 最后的执行结果
      */
     String result;
+
+    /**
+     * 最后的执行结果详情
+     */
+    String details;
+
+    public PipelineInfoVO(Pipeline pipeline, PipelineHistory pipelineHistory){
+        startTime = pipelineHistory.getStartTime();
+        username = pipelineHistory.getUsername();
+        result = pipelineHistory.getResult();
+        details = pipelineHistory.getDetails();
+        name = pipeline.getName();
+        id =pipeline.getId();
+    }
 }

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

@@ -15,11 +15,15 @@ import java.sql.Timestamp;
 @AllArgsConstructor
 public class UserVO {
     private Integer id;
-    private UserIdentity role;
+
     private String username;
-    private String email;
+
     private String phone;
 
+    private String email;
+
+    private UserIdentity role;
+
     public UserVO(User user) {
         BeanUtils.copyProperties(user,this);
     }

+ 5 - 1
web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/DeploymentServiceImpl.java

@@ -1,8 +1,11 @@
 package seecoder.devcloud.web.service.impl.pipeline;
 
 import org.springframework.stereotype.Service;
+import seecoder.devcloud.web.model.vo.pipeline.DeploymentInfoVO;
 import seecoder.devcloud.web.service.pipeline.DeploymentService;
 
+import java.util.List;
+
 /**
  * @author PuHong Weng
  * @date 2021/3/12
@@ -11,8 +14,9 @@ import seecoder.devcloud.web.service.pipeline.DeploymentService;
 @Service
 public class DeploymentServiceImpl implements DeploymentService {
     @Override
-    public void retrieveDeploymentInfos(Integer projectId) {
+    public List<DeploymentInfoVO> retrieveDeploymentInfos(Integer projectId) {
         //todo  需要远端查看k8s实例的status
+        return null;
     }
 
     @Override

+ 60 - 5
web/src/main/java/seecoder/devcloud/web/service/impl/pipeline/PipelineServiceImpl.java

@@ -1,12 +1,22 @@
 package seecoder.devcloud.web.service.impl.pipeline;
 
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import seecoder.devcloud.web.dao.pipeline.PipelineHistoryMapper;
+import seecoder.devcloud.web.dao.pipeline.PipelineMapper;
+import seecoder.devcloud.web.dao.user.UserMapper;
+import seecoder.devcloud.web.model.po.pipeline.Pipeline;
+import seecoder.devcloud.web.model.po.pipeline.PipelineHistory;
+import seecoder.devcloud.web.model.po.user.User;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineConfigVO;
+import seecoder.devcloud.web.model.vo.pipeline.PipelineCreateVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineHistoryVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineInfoVO;
 import seecoder.devcloud.web.service.pipeline.PipelineService;
 
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @author PuHong Weng
@@ -15,33 +25,78 @@ import java.util.List;
  */
 @Service
 public class PipelineServiceImpl implements PipelineService {
+
+    private final PipelineHistoryMapper pipelineHistoryMapper;
+
+    private final PipelineMapper pipelineMapper;
+
+    private final UserMapper userMapper;
+
+
+    @Autowired
+    public PipelineServiceImpl(PipelineHistoryMapper pipelineHistoryMapper, PipelineMapper pipelineMapper, UserMapper userMapper) {
+        this.pipelineHistoryMapper = pipelineHistoryMapper;
+        this.pipelineMapper = pipelineMapper;
+        this.userMapper = userMapper;
+    }
+
+
     @Override
     public List<PipelineInfoVO> retrievePipelineInfos(Integer projectId) {
-        return null;
+        projectAuthentication(projectId);
+        List<Pipeline> pipelines = pipelineMapper.selectByProjectId(projectId);
+        List<Integer> pipelineIds = pipelines.stream().map(Pipeline::getId).collect(Collectors.toList());
+        List<PipelineHistory> histories = pipelineHistoryMapper.selectRecentlyHistoryBy(pipelineIds);
+        Map<Integer,PipelineHistory> historyMap = histories.stream().collect(Collectors.toMap(PipelineHistory::getPipelineId, x->x));
+        return pipelines.stream().map(x->new PipelineInfoVO(x,historyMap.get(x.getId()))).collect(Collectors.toList());
     }
 
     @Override
     public PipelineConfigVO retrievePipelineConfig(Integer projectId, Integer pipelineId) {
-        return null;
+        projectAuthentication(projectId);
+        return new PipelineConfigVO(pipelineMapper.selectById(pipelineId));
     }
 
     @Override
     public List<PipelineHistoryVO> retrievePipelineHistory(Integer projectId, Integer pipelineId) {
-        return null;
+        projectAuthentication(projectId);
+        List<PipelineHistory> histories = pipelineHistoryMapper.selectByPipelineId(pipelineId);
+        return histories.stream().map(PipelineHistoryVO::new).collect(Collectors.toList());
     }
 
     @Override
-    public void createPipelineConfig(Integer projectId, Integer pipelineId, String templateName) {
+    public void createPipelineConfig(PipelineCreateVO pipelineCreateVO) {
+        projectAuthentication(pipelineCreateVO.getProjectId());
+        Pipeline pipeline = Pipeline.builder()
+                .name(pipelineCreateVO.getName())
+                .projectId(pipelineCreateVO.getProjectId())
+                .configJson("") //todo 提供模板
+                .build();
+        pipelineMapper.insert(pipeline);
+
 
     }
 
     @Override
     public void savePipelineConfig(Integer projectId, Integer pipelineId, String configJson) {
-        //todo 校验json格式
+        projectAuthentication(projectId);
+        pipelineMapper.updateConfigJson(pipelineId,configJson);
+
     }
 
     @Override
     public void deletePipelineConfig(Integer projectId, Integer pipelineId) {
+        projectAuthentication(projectId);
+        pipelineMapper.delete(pipelineId);
+    }
+
+    /**
+     * 判断用户是否有权限修改这些流水线配置,
+     * 防止用户修改提交的参数从而修改其他组的流水线
+     */
+    private void projectAuthentication(Integer projectId){
+        User user = userMapper.findLoginUser();
+        //todo 鉴权
 
     }
 }

+ 15 - 2
web/src/main/java/seecoder/devcloud/web/service/impl/user/UserServiceImpl.java

@@ -2,12 +2,14 @@ package seecoder.devcloud.web.service.impl.user;
 
 
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.stereotype.Service;
 
-import seecoder.devcloud.web.model.po.user.User;
+import seecoder.devcloud.web.dao.user.UserMapper;
+import seecoder.devcloud.web.model.vo.user.UserVO;
 import seecoder.devcloud.web.service.user.UserService;
 
 @Service
@@ -16,13 +18,24 @@ public class UserServiceImpl implements UserService, UserDetailsService {
 
 
 
+	private final UserMapper userMapper;
+
+	@Autowired
+	public UserServiceImpl(UserMapper userMapper) {
+		this.userMapper = userMapper;
+	}
+
+	@Override
+	public UserVO getLoginUser(){
+		return new UserVO(userMapper.findLoginUser());
+	}
+
 
 	/**
 	 * 此后端整合portal门户系统,不需要登陆功能,不用重写此方法
 	 */
 	@Override
 	public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
-		//todo 门户功能获取用户
 		return null;
 	}
 

+ 5 - 1
web/src/main/java/seecoder/devcloud/web/service/pipeline/DeploymentService.java

@@ -1,5 +1,9 @@
 package seecoder.devcloud.web.service.pipeline;
 
+import seecoder.devcloud.web.model.vo.pipeline.DeploymentInfoVO;
+
+import java.util.List;
+
 /**
  * @author PuHong Weng
  * @date 2021/3/11
@@ -10,7 +14,7 @@ public interface DeploymentService {
     /**
      * 获取项目部署的实例信息
      */
-    void retrieveDeploymentInfos(Integer projectId);
+    List<DeploymentInfoVO> retrieveDeploymentInfos(Integer projectId);
 
 
     /**

+ 2 - 1
web/src/main/java/seecoder/devcloud/web/service/pipeline/PipelineService.java

@@ -2,6 +2,7 @@ package seecoder.devcloud.web.service.pipeline;
 
 import seecoder.devcloud.web.model.po.pipeline.Deployment;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineConfigVO;
+import seecoder.devcloud.web.model.vo.pipeline.PipelineCreateVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineHistoryVO;
 import seecoder.devcloud.web.model.vo.pipeline.PipelineInfoVO;
 
@@ -40,7 +41,7 @@ public interface PipelineService {
     /**
      * 依据模板创建一个流水线配置
      */
-    void createPipelineConfig(Integer projectId,Integer pipelineId, String templateName);
+    void createPipelineConfig(PipelineCreateVO pipelineCreateVO);
 
 
     /**

+ 3 - 0
web/src/main/java/seecoder/devcloud/web/service/user/UserService.java

@@ -1,8 +1,11 @@
 package seecoder.devcloud.web.service.user;
 
 
+import seecoder.devcloud.web.model.vo.user.UserVO;
+
 public interface UserService {
 
+    UserVO getLoginUser();
 
 
 }