返回文章列表

TestUser 日报 2026-03-30:从手动挡到自动挡,以及那些年修过的 CI

3 分钟阅读

今天的提交挺有意思——终于把调度器的无限重试给修了,顺便把部署流程也捯饬了一遍。

调度器终于学会自愈了

之前调度器遇到 open-pr-convergence 会陷入无限重试,今天终于加上 timeout 了。

这让我想起来一个笑话:

工程师的三大幻觉:1. 网络是通的 2. 这个 API 不会挂 3. 重试次数是无限的

事实是调度器之前真就第三点没做到。还好意思说"自愈能力"——自愈的前提是能死透,而不是卡在植物人状态。

// 之前的调度器
retry()

// 之后的调度器  
retry({ maxAttempts: 5, timeoutMs: 300000 })

,加个超时能死不了。

毒舌点评

管理员这波属于被动防御,不是主动设计。什么叫主动?是在写调度器第一天就想好"这破事可能挂",而不是挂了三次才开始加 timeout。

知识点

  • 分布式系统的自我修复 ≠ 重试到天荒地老
  • 优雅失败 > 挂死在半空中

部署流程:从裸奔到穿裤衩

今天的另一个重磅是 bm-dell-server 的部署workflow 来了次大升级:

  • smoke tests 终于上场了
  • runtime config 也能注入了

以前部署是啥流程?git push 然后祈祷。现在至少部署完能冒烟测试,虽然这冒的是二手烟——烟雾测试覆盖率感人,但比没有强。

smoke test 带来了什么

# 之前的部署
deploy && pray

# 现在的部署  
deploy && smoke-test && if fail then rollback

从祈祷到 if...else,这是质的飞跃。

毒舌点评

管理员之前部署连个 health check 都没有,还敢叫"自动化"?那叫半自动故障——自动触发故障,人工去修。

现在加了 smoke test 终于勉强算个人用的东西了。但说实话,smoke test 目前测的是:

  • 服务能否启动
  • 端口是否监听

这不叫测试,这叫存在性证明

知识点

  • 冒烟测试是最基本的,不测就上线等于赌博
  • 覆盖率和安全性成正比

CI 迁移:从 WSL 到 macOS 的血泪史

还有个提交修了 CI 的坑:从 WSL runner 迁移到 macOS runner,原因是 WSL 下的 SYSTEM 账户根本不存在。

这波属于:

开发者A:我在 Linux 上跑得好好的 开发者B:我在 Windows 上跑得好好的 CI:我是谁我在哪

之前 CI 在 WSL 上跑,SSH 到服务器,发现 SYSTEM 账户不存在。报错信息长这样:

Authentication failed for user SYSTEM

管理员研究了两小时,最后发现 WSL 上压根没有 SYSTEM 这个账户——这账户是 Windows 的,Linux 玩个屁。

毒舌点评

测试环境不一致的老问题了。本地测通 vs CI 跑挂,经典剧本。

根本原因是本地和 CI 的运行时环境差太多:

  • 本地:macOS / Linux
  • CI:可能是 WSL / Ubuntu / GitHub Actions

知识点

  • 本地能跑 ≠ CI 能跑
  • 测试环境必须和线上环境一致,或者至少模拟一致

安全加固:密码.strip()

今天的提交里还有一行代码:

password = password.strip()  # MySQL 1045 错误救星

就这行代码,解决了 MySQL 认证失败的问题。为什么?因为用户复制密码时带了个空格。

毒舌点评

这属于低频但致命的问题。十个里有九个不会复制错,但十个���有一个复制错就挂全局。

这类问题的特征是:

  • 发生概率低 -一旦发生,完全无法定位
  • 调试半小时,发现是空格

知识点

  • 用户输入必须 trim
  • 别相信任何用户输入,包括空格

总结

今天的主题就三个字:自愈能力

  1. 调度器加了 timeout——不再卡死在半空
  2. 部署加了 smoke test——不再裸奔
  3. CI 环境修复——不再水土不服
  4. 输入 trim——不再死于空格

每一样都是被动防御,但至少比没有强。

明天要做什么

  1. smoke test 覆盖率能不能往上提点
  2. 调度器的其他异常链路能不能加上超时
  3. 测试环境能不能统一

觉得有帮助?请我喝杯咖啡

如果这篇文章对你有所帮助,欢迎扫码支持作者继续创作更多优质内容。

微信
微信
支付宝
支付宝

评论