# DeploymentTool **Repository Path**: weiranyi/deployment-tool ## Basic Information - **Project Name**: DeploymentTool - **Description**: 项目批量部署工具 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-30 - **Last Updated**: 2025-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java部署工具使用文档 ## 1. 概述 Java部署工具是一个用于自动化部署应用程序到多个远程服务器的工具。该工具通过SSH连接到目标服务器,使用SCP协议传输文件,并执行远程命令来启动应用程序。 ### 1.1 主要功能 - 支持将应用程序文件(agentLinux/agent.exe和application.yaml)部署到多个远程服务器 - 支持Linux和Windows服务器,自动检测操作系统类型 - 自动创建启动脚本并执行(Linux使用shell脚本,Windows使用批处理或PowerShell脚本) - 支持交互式输入服务器信息或从配置文件读取 - 自动停止旧进程并启动新进程 - 提供详细的部署日志和结果报告 ## 2. 系统要求 - Java 11或更高版本 - 目标服务器支持SSH和SCP协议 - 目标服务器具有足够的权限创建和执行文件 ## 3. 安装与配置 ### 3.1 获取部署工具 从项目仓库下载最新版本的部署工具JAR包: ``` DeploymentTool-1.0-SNAPSHOT-jar-with-dependencies.jar ``` ### 3.2 准备部署文件 确保在运行部署工具的目录中有以下文件: - 对于Linux目标服务器:`agentLinux`(Linux可执行文件) - 对于Windows目标服务器:`agent.exe`(Windows可执行文件) - `application.yaml`:应用程序的配置文件(适用于所有操作系统) ### 3.3 配置服务器信息 有两种方式配置服务器信息: #### 3.3.1 交互式输入 运行部署工具时不指定配置文件,程序将提示您输入服务器信息,包括: - IP地址 - 用户名 - 密码 - SSH端口(默认22) - 部署路径(Linux默认/home/software/,Windows默认C:\agent\) - 操作系统类型(Linux、Windows或自动检测) #### 3.3.2 配置文件 创建一个服务器配置文件(例如`servers.properties`),格式如下: ```properties # 服务器数量 server.count=3 # 服务器1配置 - Linux服务器 server.1.ip=192.168.1.100 server.1.username=admin server.1.password=password123 server.1.port=22 server.1.deployPath=/home/software/ server.1.osType=LINUX # 服务器2配置 - Windows服务器 server.2.ip=192.168.1.101 server.2.username=administrator server.2.password=password123 server.2.port=22 server.2.deployPath=C:\agent\ server.2.osType=WINDOWS # 服务器3配置 - 自动检测操作系统类型 server.3.ip=192.168.1.102 server.3.username=admin server.3.password=password123 server.3.port=22 # 不指定osType时将自动检测 ``` ## 4. 使用方法 ### 4.1 交互式模式 ```bash java -jar DeploymentTool-1.0-SNAPSHOT-jar-with-dependencies.jar ``` 程序将提示您输入服务器信息,然后执行部署。 ### 4.2 配置文件模式 ```bash java -jar DeploymentTool-1.0-SNAPSHOT-jar-with-dependencies.jar -config servers.properties ``` 程序将从配置文件读取服务器信息,然后执行部署。 ### 4.3 部署过程 1. 程序连接到目标服务器 2. 传输`agentLinux`和`application.yaml`文件到目标服务器的指定目录 3. 创建启动脚本`start_agent.sh` 4. 停止旧进程(如果存在) 5. 执行启动脚本,启动新进程 6. 显示部署结果 ## 5. 启动脚本说明 ### 5.1 Linux启动脚本 部署工具会在Linux目标服务器上创建一个名为`start_agent.sh`的启动脚本,内容如下: ```bash #!/bin/bash cd /home/software/ # 部署路径 nohup ./agentLinux > agent.log 2>&1 & echo $! > agent.pid echo "Agent started with PID $(cat agent.pid)" ``` 该脚本会: - 切换到部署目录 - 使用nohup在后台启动agentLinux - 将标准输出和错误输出重定向到agent.log - 将进程ID保存到agent.pid文件中 ### 5.2 Windows启动脚本 部署工具会在Windows目标服务器上创建两种启动脚本: #### 5.2.1 批处理脚本 (start_agent.bat) ```batch @echo off cd /d C:\agent\ # 部署路径 if exist agent.pid ( for /f "tokens=1" %%i in (agent.pid) do ( taskkill /f /pid %%i 2>nul ) ) start /b cmd /c agent.exe > agent.log 2>&1 for /f "tokens=2" %%a in ('tasklist /fi "imagename eq agent.exe" /fo list ^| find "PID:"') do ( echo %%a > agent.pid echo Agent started with PID %%a ) ``` #### 5.2.2 PowerShell脚本 (start_agent.ps1) ```powershell Set-Location -Path 'C:\agent\' # 部署路径 # 停止旧进程(如果存在) if (Test-Path .\agent.pid) { $pid = Get-Content .\agent.pid try { Stop-Process -Id $pid -Force -ErrorAction SilentlyContinue } catch { } } # 启动新进程 $process = Start-Process -FilePath '.\agent.exe' -WindowStyle Hidden -PassThru -RedirectStandardOutput .\agent.log -RedirectStandardError .\agent_error.log # 保存PID $process.Id | Out-File -FilePath .\agent.pid Write-Host "Agent started with PID $($process.Id)" ``` 部署工具会优先尝试使用PowerShell脚本(如果目标服务器支持PowerShell),如果PowerShell不可用,则回退到使用批处理脚本。 ## 6. 日志和监控 ### 6.1 部署工具日志 部署工具使用SLF4J和Logback记录日志,默认输出到控制台。 ### 6.2 应用程序日志 应用程序的日志保存在目标服务器的部署目录下的`agent.log`文件中。 ### 6.3 进程监控 应用程序的进程ID保存在目标服务器的部署目录下的`agent.pid`文件中,可以使用以下命令检查进程状态: ```bash ps -p $(cat /home/software/agent.pid) ``` ## 7. 故障排除 ### 7.1 连接问题 - 确保目标服务器的SSH服务正在运行 - 检查IP地址、用户名和密码是否正确 - 检查SSH端口是否正确(默认为22) - 确保网络连接畅通 - Windows服务器需要启用SSH服务(可以使用OpenSSH或类似工具) ### 7.2 权限问题 - 确保目标服务器上的用户有足够的权限创建和执行文件 - Linux服务器:检查部署目录的权限 - Windows服务器:确保用户具有管理员权限或对部署目录的完全控制权限 - Windows服务器:可能需要关闭UAC或以管理员身份运行SSH服务 ### 7.3 文件传输问题 - Linux服务器:确保本地有`agentLinux`文件 - Windows服务器:确保本地有`agent.exe`文件 - 所有服务器:确保本地有`application.yaml`文件 - 检查目标服务器上的磁盘空间是否足够 - Windows服务器:确保防火墙不阻止SCP传输 ### 7.4 启动问题 - 检查`agent.log`文件中的错误信息 - Linux服务器:确保`agentLinux`文件有执行权限 - Windows服务器:确保`agent.exe`不被杀毒软件拦截 - Windows服务器:如果PowerShell脚本执行失败,检查PowerShell执行策略(可能需要设置为Bypass) - 检查`application.yaml`配置是否正确 ## 8. 高级配置 ### 8.1 自定义部署路径 在配置服务器信息时,可以为每个服务器指定不同的部署路径: ```properties server.1.deployPath=/custom/path/ ``` ### 8.2 自定义SSH端口 如果目标服务器使用非标准SSH端口,可以在配置中指定: ```properties server.1.port=2222 ``` ## 9. 安全建议 - 不要在配置文件中使用明文密码,建议使用SSH密钥认证 - 定期更改服务器密码 - 限制部署用户的权限 - 保护配置文件和部署工具的访问权限 ## 10. 常见问题 ### Q: 如何更新已部署的应用程序? A: 只需再次运行部署工具,它会自动停止旧进程并启动新进程。 ### Q: 如何手动停止应用程序? A: 在目标服务器上执行以下命令: ```bash kill $(cat /home/software/agent.pid) ``` ### Q: 如何查看应用程序日志? A: 在目标服务器上查看agent.log文件: ```bash tail -f /home/software/agent.log ``` ### Q: 部署失败如何排查? A: 检查部署工具的日志输出,查看具体的错误信息,然后参考本文档的故障排除部分。