第 0006 荐:Kooder,你的有 <码/> 搜索 - 图1

Kooder 是 Gitee 团队开发的一款代码搜索系统,可为 Gitee/GitLab/Gitea 提供代码搜索服务。

背景

一个企业里往往有大量的项目,每个项目都包含很多的代码,这些代码都是企业的核心资产。 经过日积月累,不同的开发人员不断的修改完善,企业中很难有人能掌握所有的代码。 于是企业全库的代码搜索就变得非常重要。

例如我们可以搜索公司代码是否包含某类敏感信息,是否使用了某些不安全的方法等等。

Kooder 是什么

Kooder 是一个开源的代码搜索工具,目标是为包括 Gitee/GitLab/Gitea 在内的代码托管系统提供 自动的源码、仓库和 Issue 的搜索服务。

搜索界面效果

Kooder ScreenShot

Kooder 架构

Kooder 服务包含两个模块,分别是 gateway 和 indexer(默认配置下 indexer 被集成到 gateway 中)。 其中 gateway 用来接受来自 HTTP 的索引任务, 对任务进行检查后存放到队列中; 同时 gateway 还接受搜索的请求,并返回搜索结果给客户端。而 indexer 进程负责监控队列中的索引任务, 并将这些要新增、删除和修改索引的任务更新到索引库中。

模块说明

  • core 核心对象和公共类
  • gateway 用来接收来自 HTTP 的索引和搜索的请求
  • indexer 构建、更新和删除索引的服务

数据流图

Kooder Flow

源码安装

1.依赖

  • openjdk >= 8
  • maven > 3

2.下载代码

  1. $ git clone https://gitee.com/koode/kooder.git
  2. $ cd kooder

运行前准备工作

配置文件: core/src/main/resources/kooder.properties

1.配置 HTTP 服务

http.url Kooder 的网址,该地址用于向 Git 服务注入 Webhook 的链接地址, 必须是 Git 服务可访问的地址,例如:http.url = http://<kooder-host>:8080

http.port Kooder 运行的 HTTP 端口

2.配置 GitLab 服务地址

目前 Kooder 支持 Gitee、GitLab 和 Gitea ,其他服务正在开发中。

gitlab.url 访问 GitLab 的首页
gitlab.personal_access_token Gitlab 管理员账号 root 的 Personal Access Token

更多配置项请看 configuration.md

3.构建并运行

  1. $ cd Kooder
  2. $ mvn install
  3. # 给执行脚本添加权限
  4. $ chmod +x bin/*.sh
  5. # 启动 gateway
  6. $ bin/gateway.sh
  7. ### 浏览器访问 http://localhost:8080

Kooder Search API

See API.md

Docker 安装

docker-compose

依赖

  • docker-ce环境
  • docker-compose

开发代码优化后,部署只需将代码 clone 下来,然后在服务器上部署容器平台,在平台上执行如下命令:

  1. # 开箱即用
  2. docker-compose up -d
  3. # 关闭容器
  4. docker-compose down

docker-compose ha 版

依赖

  • docker-ce环境
  • docker-compose

开发代码优化后,部署只需将代码clone下来,然后在服务器上部署容器平台,在平台上执行如下命令:

  1. # 开箱即用
  2. docker-compose -f docker-compose-ha.yaml up -d
  3. # 关闭容器
  4. docker-compose -f docker-compose-ha.yaml down

实现的效果如下:

Kooder docker-ha

配置文件: core/src/main/resources/kooder.properties,修改配置文件之后,执行如下命令:

  1. docker-compose down
  2. docker-compose up -d

查看服务启动状态

  1. docker logs -f CONTAINER_ID
  2. ......
  3. 2021-04-07 13:28:49 INFO [gateway] - Tasks [indexer,gitee] started.
  4. 2021-04-07 13:28:49 INFO [gateway] - READY (*:8080)!
  5. .......

以上信息显示的日志表明启动成功

注意

每次启动都会执行mvn install以确保配置文件生效

对接不同平台

对接 GitLab

需配置如下几项:

  1. http.startup.tasks = indexer,gitlab
  2. gitlab.url = http://gitlab-host:gitlab-port/
  3. gitlab.personal_access_token = <root user personal access token>
  4. git.username = root
  5. git.password =

如果不填写密码,则 Kooder 会自动使用 access token 作为密码。

对接 Gitee 私有化

需配置如下几项:

  1. http.startup.tasks = indexer,gitee
  2. gitee.url = https://<gitee-host>/
  3. gitee.personal_access_token = <root user personal access token>
  4. git.username = root
  5. git.password =

对接 Gitea

1.进入 Gitea 管理后台;

第 0006 荐:Kooder,你的有 <码/> 搜索 - 图5

2.添加 Gitea Web 钩子;

第 0006 荐:Kooder,你的有 <码/> 搜索 - 图6

3.设置 Web 钩子。

Url 填写 http://kooder-ip:kooder-port/gitea,请求方式为POST + application/json,触发条件可选所有事件或者自定义事件

如选择自定义事件,则需要勾选仓库事件的推送仓库选项,和工单事件的工单选项。

第 0006 荐:Kooder,你的有 <码/> 搜索 - 图7

4.配置如下几项

  1. http.startup.tasks = indexer,gitea
  2. gitea.secret_token = <webhook secret token>
  3. gitea.url = http://gitea-ip:prot/
  4. gitea.personal_access_token = <admin personal access token>
  5. git.username = <admin username>
  6. git.password = <admin password>

从文件索引仓库

Kooder 目前支持同一托管平台的仓库索引,如需索引多个托管平台,进行分次导入即可。

kooder.properties 配置文件中进行如下设置:

  1. //开启 Kooder 从文件索引仓库的特性
  2. https.startup.tasks = indexer,file //增加 file 字段
  3. file.index.path = C:/Documents/Kooder/file.txt //配置 file.index.path 文件路径(file.txt 为本地文件,路径可自行配置)
  4. file.index.vender = gitee //指定对应的代码托管平台(必须)

file.txt 内容

  1. //添加配置中指定的托管平台仓库地址
  2. https://gitee.com/koode/kooder.git
  3. https://gitee.com/ld/J2Cache.git
  4. ...

构建并运行

  1. $ cd Kooder
  2. $ mvn install
  3. # 启动 gateway
  4. $ bin/gateway.sh
  5. # 浏览器访问 http://localhost:8080

搜索界面效果

kooder-index

Kooder ScreenShot

相关链接