Skip to content

Latest commit

 

History

History
184 lines (137 loc) · 6.1 KB

File metadata and controls

184 lines (137 loc) · 6.1 KB

主要功能

  1. JaCoCo Agent检查和拷贝:自动检查目标机器上是否存在jacocoagent.jar,如果不存在则从执行机拷贝过去

  2. 端口冲突检查:扫描目标机器上所有应用的vmoptions文件,检查已使用的JaCoCo端口,自动分配可用端口(从6300开始递增)

  3. 自动配置添加:在每个应用的vmoptions文件中添加JaCoCo参数,并自动备份原文件

  4. 批量部署:支持同时处理多个服务器

使用方法

  1. 基本用法
# 处理单个服务器
./deploy_jacoco.sh 192.168.1.10

# 处理多个服务器
./deploy_jacoco.sh 192.168.1.10 192.168.1.11 192.168.1.12
  1. 指定应用
# 只为特定应用添加配置
./deploy_jacoco.sh -a "app1,app2,app3" 192.168.1.10
  1. 从文件读取服务器列表
# 创建服务器列表文件
echo -e "192.168.1.10\n192.168.1.11\n192.168.1.12" > servers.txt

# 使用文件
./deploy_jacoco.sh -f servers.txt
  1. 自定义配置
# 自定义JaCoCo文件路径和起始端口
./deploy_jacoco.sh -j /path/to/jacocoagent.jar -p 7000 -u root 192.168.1.10
  1. 预览模式
# 仅显示将要执行的操作,不实际执行
./deploy_jacoco.sh --dry-run -a "app1,app2" 192.168.1.10

关键特性

  • 智能端口分配:自动检查已使用端口,避免冲突
  • 安全备份:修改vmoptions文件前自动备份
  • 错误处理:完善的错误检查和处理机制
  • 日志记录:详细的操作日志,便于跟踪和调试
  • SSH支持:支持SSH密钥认证和自定义用户
  • 预览模式:支持dry-run模式,预览操作而不实际执行

使用前准备

  1. 确保执行机上有jacocoagent.jar文件
  2. 配置好SSH免密登录到目标服务器
  3. 根据需要修改脚本中的路径配置
  4. 给脚本执行权限:chmod +x deploy_jacoco.sh

仅仅检查vmoptions文件中的配置是不够的,还需要检查端口是否真的在系统层面被占用。加入了系统层面的端口占用检查。更新的主要改进包括:

新增端口检查功能

  1. 多层端口检查

    • 检查vmoptions文件中已配置的JaCoCo端口
    • 检查系统层面正在监听的端口(使用netstat/ss)
    • 实时检查端口是否真的可用
  2. 兼容性处理

    • 优先使用netstat命令
    • 如果不存在则使用ss命令
    • 备用方案使用/proc/net/tcp
  3. 实时验证

    • 在分配端口前进行最终的可用性检查
    • 避免因为缓存或其他原因导致的端口冲突

端口检查逻辑

# 检查顺序:
1. 配置文件中是否已使用该端口
2. 系统netstat/ss显示该端口是否被监听
3. 实时尝试检查端口是否真的可用
4. 如果都通过,则认为端口可用

新增的函数说明

  • get_system_used_ports(): 获取系统层面正在使用的端口
  • is_port_available(): 实时检查特定端口是否可用
  • get_next_available_port(): 综合检查找到下一个可用端口

使用示例

运行时你会看到更详细的日志:

[2024-01-15 10:30:15] 服务器 192.168.1.10 配置文件中已使用的JaCoCo端口: 6300 6301
[2024-01-15 10:30:16] 服务器 192.168.1.10 系统层面正在使用的端口: 22 80 443 3306 6300
[2024-01-15 10:30:17] 端口 6300 已在配置文件中使用,尝试下一个端口
[2024-01-15 10:30:17] 端口 6301 已在配置文件中使用,尝试下一个端口
[2024-01-15 10:30:18] 找到可用端口: 6302
[2024-01-15 10:30:19] 成功为应用 app1 添加JaCoCo配置,端口: 6302

这样可以确保分配的端口既不会与已有的JaCoCo配置冲突,也不会与系统中其他服务的端口冲突,大大提高了端口分配的可靠性。

新增的查询功能

1. 查询特定应用的JaCoCo端口

# 查询单个应用在单个服务器上的端口
./deploy_jacoco.sh --query -a "app1" 192.168.1.10

# 查询多个应用在单个服务器上的端口  
./deploy_jacoco.sh --query -a "app1,app2,app3" 192.168.1.10

# 查询单个应用在多个服务器上的端口
./deploy_jacoco.sh --query -a "app1" 192.168.1.10 192.168.1.11 192.168.1.12

# 使用服务器列表文件查询
./deploy_jacoco.sh --query -a "app1" -f servers.txt

2. 列出所有JaCoCo配置

# 列出单个服务器上所有JaCoCo配置
./deploy_jacoco.sh --list 192.168.1.10

# 列出多个服务器上所有JaCoCo配置
./deploy_jacoco.sh --list 192.168.1.10 192.168.1.11

# 使用服务器列表文件
./deploy_jacoco.sh --list -f servers.txt

查询输出示例

特定应用查询输出:

========================================
服务器           应用名               端口       状态说明
========================================
192.168.1.10    app1                6300      端口占用
192.168.1.10    app2                6301      端口空闲
192.168.1.11    app1                6300      端口占用
192.168.1.11    app2                N/A (未配置)
========================================

列出所有配置输出:

服务器 192.168.1.10 JaCoCo配置:
----------------------------------------
应用名               端口       状态           完整配置
----------------------------------------
app1                6300      占用           -javaagent:/app/appsystem/apps/jacocoagent.jar=output=tcpserver,port=6300,address=0.0.0.0
app2                6301      空闲           -javaagent:/app/appsystem/apps/jacocoagent.jar=output=tcpserver,port=6301,address=0.0.0.0
----------------------------------------

新增的功能函数

  1. query_jacoco_port(): 查询指定应用的JaCoCo端口
  2. list_all_jacoco_configs(): 列出服务器上所有JaCoCo配置
  3. query_mode(): 查询模式主函数,处理查询和列表逻辑

状态说明

  • 端口号: 显示实际配置的端口
  • N/A (文件不存在): vmoptions文件不存在
  • N/A (未配置): vmoptions文件存在但没有JaCoCo配置
  • 端口占用: 端口正在被使用
  • 端口空闲: 端口未被占用

现在你可以方便地查询任何应用在任何服务器上的JaCoCo端口配置了!