ludc
2024-03-04 702657b9e1d73c8c26cafbc64b3284f121ad2b58
远程部署功能完善,并在本地测试成功。
已修改3个文件
39 ■■■■■ 文件已修改
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/controller/DeployAppsController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/IDeployAppsService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/controller/DeployAppsController.java
@@ -96,7 +96,7 @@
        if(Func.isBlank(serverName)){
            return R.fail("Mandatory parameter service name not found!");
        }
        return deployAppsService.importClassify(files,serverName);
        return deployAppsService.importJarUpdate(files,serverName);
    }
    /**
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/IDeployAppsService.java
@@ -56,7 +56,7 @@
     * @param serverName
     * @return
     */
    R importClassify(MultipartFile[] files, String serverName) throws ServiceException;
    R importJarUpdate(MultipartFile[] files, String serverName) throws ServiceException;
    /**
     * 执行命令
Source/UBCS/ubcs-service/ubcs-deploy/src/main/java/com/vci/ubcs/deploy/service/impl/DeployAppsServiceImpl.java
@@ -15,6 +15,7 @@
import com.vci.ubcs.deploy.service.IDeployAppsService;
import com.vci.ubcs.deploy.vo.DeployAppsVO;
import com.vci.ubcs.starter.util.HttpUtils;
import jodd.io.StreamGobbler;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springblade.core.secure.utils.AuthUtil;
@@ -39,7 +40,9 @@
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.net.InetAddress;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -228,7 +231,7 @@
     * @return
     */
    @Override
    public R importClassify(MultipartFile[] files, String serverName) throws ServiceException {
    public R importJarUpdate(MultipartFile[] files, String serverName) throws ServiceException {
        // 根据服务名查看到服务相关信息
        List<DeployApps> deployAppsDB = deployAppsMapper.selectList(Wrappers.<DeployApps>query().lambda().eq(DeployApps::getServerName, serverName));
        if(deployAppsDB.isEmpty()){
@@ -297,7 +300,7 @@
                    file1.delete();
                }
            }
            String output = excute(deployAppsDB.get(0),"UP");
            String output = execute(deployAppsDB.get(0),"UP");
            return R.success(output.toString());
        } catch (IOException e) {
            e.printStackTrace();
@@ -320,7 +323,7 @@
            if(deployAppsDB.isEmpty()){
                return R.fail("命令执行出错,库中未找到"+ deployAppsVO.getName() +"服务相关配置:" );
            }
            excuteRes = excute(deployAppsDB.get(0),deployAppsVO.getStatus());
            excuteRes = execute(deployAppsDB.get(0),deployAppsVO.getStatus());
            return R.success("命令执行结束:"+excuteRes);
        }catch (Exception e){
            throw new ServiceException(e.getMessage());
@@ -333,7 +336,7 @@
     * @return
     * @throws ServiceException
     */
    private String excute(DeployApps deployApps,String type) throws ServiceException {
    public String execute(DeployApps deployApps,String type) throws ServiceException {
        // 处理上传文件的逻辑
        StringBuilder output = new StringBuilder();
        try {
@@ -348,25 +351,37 @@
            }
            // 执行Linux命令
            log.info("开始执行命令:"+cmd);
            Process process = Runtime.getRuntime().exec(cmd);
            // Process process = Runtime.getRuntime().exec(cmd);
            ProcessBuilder processBuilder = new ProcessBuilder(cmd.split("\\s"));
            // processBuilder.command(cmd);
            Process process = processBuilder.start();
            // 等待命令执行完成
            int exitCode = process.waitFor();
            InputStream inputStream = process.getInputStream();
            OutputStream outputStream = process.getOutputStream();
            InputStream errorStream = process.getErrorStream();
            // 读取命令执行结果
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            String line;
            while ((line = reader.readLine()) != null) {
                output.append(line).append("\n");
            }
            // 等待命令执行完成
            int exitCode = process.waitFor();
            reader.close();
            // 读取命令执行的错误输出流
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
            StringBuilder errorOutput = new StringBuilder();
            String errorLine;
            while ((errorLine = errorReader.readLine()) != null) {
                errorOutput.append(errorLine).append("\n");
            }
            String errorOutputString = errorOutput.toString();
            errorReader.close();
            log.info("错误输出:" + errorOutputString);
            log.info("命令执行结果:" + output.toString()+":"+exitCode);
            int exitValue = process.exitValue();
            log.info("命令执行结果:" + output.toString()+":"+exitCode+","+exitValue);
            return output.toString();
        }catch (IOException | InterruptedException e){
            e.printStackTrace();