logo
0
0
WeChat Login

fix(ci): 修复 CNB dash 不兼容的健康检查循环#9

Merged
created 2 weeks ago
main
fix/ci-dash-shell-compat
Edit
OverviewCommits
1
Files changed
2
Attachments

CI 日志根因

CI 日志显示 compose 成功:

Container mc-test-db     Started
Container mc-test-redis  Started
sh: 6: Syntax error: "&&" unexpected

CNB runner 的默认 /bin/sh 是 dash(Debian 家族),不是 bash。之前 .cnb.yml 里写的内联循环包含 &&$() 嵌套 || 等语法,在 dash 里解析失败。

修复

把健康检查循环抽到独立脚本 scripts/ci-wait-healthy.sh

  • 纯 POSIX sh 语法,明确 shebang #!/bin/sh
  • 使用 set -eu 严格模式
  • docker inspect -f '{{.State.Health.Status}}' 探测,不依赖复杂的管道解析
  • 60 秒总超时,2 秒间隔;超时时打印每个容器的状态供排查

本地验证

  • sh -n scripts/ci-wait-healthy.sh 语法合法
  • dash -n scripts/ci-wait-healthy.sh dash 语法合法
  • ✅ 端到端实跑:docker compose up -ddash scripts/ci-wait-healthy.sh mc-test-db mc-test-redis → 4 秒内返回 healthy

与 PR #8 的关系

PR #8 把 Testcontainers 换成 docker-compose 的方案本身是对的——CI 日志证明 compose 成功起来了。只是后面的 shell 脚本写法不兼容 dash。这是一次 runner 环境适配的小洞。

is using the squash method to merge intodd7a1a61
added 2 commits
fix(ci): 修复 CNB dash 不兼容的健康检查循环 (#9)
docs(lessons): 新增第 13 条反模式(CI YAML 内联 shell)
docs(lessons): 第 13 条反模式——CI YAML 内联 shell (#10)
added 4 commits
docs(governance): 同步 CI 接入的轨迹档案与仪表盘状态
docs(checkpoint): 回填 PR #29 CNB 首绿实测 + 事实更正 + 隐藏 bug 记录
docs(checkpoint): 闭环 T-06 + 轮次 7 档案 + README/LESSONS 同步
docs(checkpoint): 闭环 T-07 + 轮次 10 档案 + B9 CI-time 防御链路

Successfully merged and closed

branch can be safely deleted
Reviewer
None yet
Assignee
None yet
Label
None yet
Participant