背景:

dev准备更新某个基础数据库表结构,为了评估影响范围和后续通知协作,需要找出使用此表的代码库。

思路:

  1. 查询数据库的连接IP,根据IP查询部署在上面的服务,根据服务找对应代码库。
    • 难点:
      • 并不是所有服务都会实时连接数据库,可能会漏掉;
      • 服务器上面部署的服务太多,还需要再做过滤。
    • 综上,这个思路否定。
  2. 直接通过关键字查询代码库源码来定位。
    • 难点:
      • 需要拥有大范围的代码库权限
      • 多目录文件查询涉及关键字文件
    • 解决方案:
      • 作为公司SCM权限不是问题
      • 使用OpenGrok来做关键字查询

参考链接:

实施步骤:

  1. 搭建OpenGrok:
    • 安装jdk-1.8
    • 安装tomcat-8
    • 安装Exuberant Ctags 下载地址
      1
      2
      3
      4
      5
      $ tar zxvf ctags-5.8.tar.gz
      $ cd ctags-5.8/
      $ ./configure
      $ make
      $ make install
    • 安装opengrok 下载地址 | 安装使用wiki
      1
      2
      3
      $ tar zxvf opengrok-1.1-rc16.tar.gz
      $ cd opengrok-1.1-rc16/bin/
      $ OPENGROK_TOMCAT_BASE=/path/to/my/tomcat/install ./OpenGrok deploy
  2. 下载代码
    • 创建一个公共代码库存放目录:
      1
      2
      $ mkdir -p /root/wwl/code/svn
      $ mkdir -p /root/wwl/code/git
    • 根据需要下载svn代码:
      1
      2
      $ cd /root/wwl/code/svn
      $ svn checkout svn_urls
    • 根据需要下载git代码:
      1
      2
      $ cd /root/wwl/code/git
      $ git clone git_urls
    • PS:如果要想查询所有分支代码
      • svn:直接checkout 包含branches目录url即可;
      • git:需要clone多次git_url到不同目录,然后cd到各自目录执行git checkout branch_name;
      • 建议只下载master/trunk和最新dev分支即可。
  3. 加载OpenGrok索引
    1
    2
    3
    $ ./OpenGrok index <absolute_path_to_your_SRC_ROOT>
    例如:
    ./OpenGrok index /root/wwl/code
    PS:如果代码文件很多的话,加载索引会很久。晚上执行第二天来看结果吧。
  4. 关键字查询
    • web端登陆:
      1
      <HOST>:<PORT>/source
    • 执行查询:
      logo

PS:

  1. OpenGrok还支持文件类型查询过滤等功能,各位可以自行尝试使用;
  2. 除了数据库表查询以外,常见的还有api调用查询;
  3. 这种方案是后置的,如果能在系统设计之初和迭代过程积极维护开发文档,形成系统整体调度架构图形的话,会另我们开发更加自信;
  4. 借此机会推动开发团队规范开发文档和产出系统调度架构图形。