Homu:持续集成的智能守护者
在软件开发中,保持代码库的健康状态是至关重要的,而这就依赖于有效的持续集成(CI)策略。Homu 是一款与GitHub和流行CI服务如Travis CI、Appveyor或Buildbot无缝集成的机器人,它提供了一种全新的解决方案,确保每次合并到主分支时都保持无误。
为什么你需要Homu?
以Travis CI为例,当你提交一个pull请求时,它会立即显示测试结果,这非常方便。然而,即使其他pull请求被合并后,你的请求仍有可能在合并到master分支后破坏原有的功能。传统的CI解决方案并不能完全避免这种情况。
为了解决这个问题,Homu会在合并前进行测试,而不是只在收到请求后。通过监听pull请求的评论,它等待配置好的审阅者的批准评论。一旦得到批准,Homu将使用你选择的CI服务测试,只有当所有测试都通过后,才会将其合并到master。
请注意,Homu并不是Travis CI、Buildbot或Appveyor的替代品,而是它们的增强版。它自身并不具备测试pull请求的能力,而是与这些服务协同工作。
受bors启发的创新
Homu的设计灵感来源于bors,但有一些显著的区别:
- 状态管理:不同于bors力求的无状态设计,Homu是带有状态的。这意味着它无需在每次运行时从头获取GitHub上的信息,这在应对GitHub的速率限制方面至关重要。
- 推送而非轮询:Homu尽可能地使用推送方式,比如通过GitHub的Webhooks接收拉取请求变更,通过HttpStatusPush将Buildbot的测试结果推回给Homu。这种做法提高了整体性能和响应速度,因为机器人能即时接收到状态更改的通知。
此外,Homu还提供了更多特性,如rollup
、try
以及对Travis CI和Appveyor的支持。
如何使用
安装
$ sudo apt-get install python3-venv python3-wheel
$ python3 -m venv .venv
$ . .venv/bin/activate
$ pip install -U pip
$ git clone https://github.com/rust-lang/homu.git
$ pip install -e homu
配置
- 复制
cfg.sample.toml
为cfg.toml
,并根据以下说明进行配置。 - 在GitHub上创建一个用于Homu的新账户,或者使用现有的账户。在开发者设置中,进入“OAuth应用”并创建一个新的应用:
- 记录下"Client ID"和"Client Secret",并将它们填入
cfg.toml
。 - OAuth回调URL应设为
http://HOST:PORT/callback
。 - 主页URL可以不填,也可以设为
http://HOST:PORT/
。
- 记录下"Client ID"和"Client Secret",并将它们填入
- 回到GitHub账户的开发者设置,然后进入"个人访问令牌"。点击"生成新令牌",并勾选"repo"和"user"范围。在
cfg.toml
中填写生成的令牌值。 - 将新的GitHub账户添加为要配置的仓库的协作者,并赋予"写"权限。
- 在你的仓库设置中添加一个Webhook,路径为"设置"->"Webhooks",然后:
- 载荷URL:
http://HOST:PORT/github
- 内容类型:
application/json
- 密码:与
cfg.toml
中的repo.NAME.github.secret
相同 - 事件:选择"让我选择单个事件",然后选取
Issue comments
、Pull requests
、Pushes
、Statuses
、Check runs
- 载荷URL:
- 如果使用的是Buildbot,需要在配置文件
master.cfg
中添加Webhook。 - 检查
cfg.toml
的其余部分,并根据需要取消注释(并修改)配置。
运行
$ . .venv/bin/activate
$ homu
技术亮点
Homu的主要特点是自动化测试,仅在获得指定审阅者批准后执行,确保了主分支的稳定。它利用GitHub Webhooks实现事件驱动,即时获取状态变化,增强了与其他服务的交互。另外,其状态管理和推送机制使其在高并发环境下仍然表现优秀。
Homu适用于任何希望提高代码审查流程效率,减少人为错误,且使用GitHub作为代码托管平台的项目。无论你是个人开发者还是大型团队,只要配合Travis CI、Appveyor或其他CI服务,都能从中受益。
现在就尝试Homu,让代码质量更上一层楼!