SuperAPI AI 工具集

antithesis-setup

部署与运维

查看项目

更新于 10-15 12:06

技能介绍

用途

Antithesis Setup 用于脚手架化(scaffold)启动 Antithesis 所需的 antithesis/ harness,使被测系统(SUT)能够以基本空闲、就绪的状态在 Antithesis 中运行。该技能专注于基础设施与就绪准备,不负责定义工作负载本身。

前置条件

  • 必须有研究产物。开始前需检查 antithesis/scratchbook/ 是否存在并包含研究输出(至少 sut-analysis.md 和 deployment-topology.md)。若 scratchbook 缺失或为空,应停止并提示用户先运行 antithesis-research 技能。
  • 需验证研究来源(provenance)。读取 sut-analysis.md 与 deployment-topology.md 中存在的 provenance frontmatter 字段,并用平实语言向用户描述,然后确认目标系统是否仍然是当前系统。若用户回答否,不得继续,应让其重新运行 antithesis-research。
  • snouty 必须已安装,否则不得继续。安装选项见官方 README:https://raw.githubusercontent.com/antithesishq/snouty/refs/heads/main/README.md

文档依据

通过 antithesis-documentation 技能访问以下页面,优先使用 snouty 文档:

  • Docker Compose 设置指南:https://antithesis.com/docs/getting_started/setup_guide/docker_compose.md
  • Docker 最佳实践:https://antithesis.com/docs/best_practices/docker_best_practices.md
  • 覆盖插桩:https://antithesis.com/docs/reference/instrumentation/coverage_instrumentation.md
  • 断言编目:https://antithesis.com/docs/reference/sdk/assertion_cataloging.md
  • 处理外部依赖:https://antithesis.com/docs/reference/dependencies.md
  • 故障注入:https://antithesis.com/docs/product/fault_injection.md

工作流程

该技能拆分为多个步骤,每个步骤位于不同的参考文件中,需逐个读取并实现。每完成一步后,检查新获得的信息是否推翻了先前步骤的决策。插桩决策(步骤 2)是开始在步骤 3 构建镜像后最常需要修改的部分。

  • references/directory-init.md:从 assets/antithesis/ 初始化或合并 antithesis/ 目录
  • references/instrumentation.md:决定每个 SUT 服务如何插桩、SDK 如何安装、符号如何交付,以及引导属性位于何处
  • references/docker-images.md:为 SUT 组件创建或调整 Dockerfile
  • references/docker-compose.md:编写 antithesis/config/docker-compose.yaml
  • references/config-dir.md:了解哪些内容属于 antithesis/config/
  • references/submit-and-test.md:本地测试并提交首次运行

通用指引

  • 与现有 antithesis/ 内容合并,而不是覆盖。
  • 使用 compose CLI 与 snouty doctor 报告的容器运行时在本地构建和测试,参见 references/submit-and-test.md。
  • 尽可能将 Antithesis 专属脚手架保留在 antithesis/ 下。
  • 将相关 Antithesis SDK 安装进 SUT 并添加一个最小引导断言,是 setup 的一部分,而不是推迟到工作负载阶段。
  • 若 antithesis/test/ 尚不存在,可创建后续工作负载所需的目录结构,但真实测试模板与断言留给 antithesis-workload。
  • 将插桩与符号化视为引导工作。直到相关镜像按语言正确暴露 /opt/antithesis/catalog/ 或 /symbols/,setup 才算完成。
  • 首次提交前必须进行本地测试。
  • 使用 antithesis-launch 技能提交运行,不要直接运行 snouty launch。若 antithesis-launch 不存在,则直接使用 snouty launch。提交前先运行 compose build 以确保镜像最新。
  • 除非部署明确要求,不要在 antithesis/config/ 下添加单独的 Dockerfile。
  • 在每个容器中禁用颜色/ANSI 输出。Antithesis 存储原始字节且不渲染转义码,颜色输出在日志与排查中是无用内容。通过 docker-compose.yaml 的 environment 块或 Dockerfile 的 ENV 指令在所有服务上设置 NO_COLOR=1,并在需要处添加工具特定标志(如 FORCE_COLOR=0)。

自我审查

宣布技能完成前,按以下标准审查工作。若智能体支持生成子智能体,创建一个全新上下文的智能体执行审查,给它该技能文件路径并让它读取所有输出产物;全新上下文的审查者能发现上下文内审查遗漏的盲点。若不支持,则自行审查:重读文件顶部的成功标准,然后逐项检查以下内容与实际输出:

  • antithesis/config/docker-compose.yaml 存在,且每个服务的 build:(本地镜像)或 image:(公共镜像)配置正确
  • docker-compose.yaml 中每个服务都包含 platform: linux/amd64
  • 每个服务的 hostname: 与其 container_name: 匹配,且二者都不含下划线(使用连字符——下划线不是合法的 DNS 标签字符)
  • 每个服务设置 init: true,避免服务进程以 pid 1 运行
  • 跨服务依赖使用 depends_on 配合 condition: service_healthy 对应已定义的 healthcheck,而非普通 depends_on
  • 运行时 compose 不设置自定义 logging: driver,不配置任何 internal: true 网络,也不设置 pull_policy:
  • references/instrumentation.md 中的插桩清单已完全实现:每个服务已插桩、仅编目,或明确记录为未插桩
  • 相关 Antithesis SDK 已安装进 SUT 依赖图
  • 引导属性存在于简单、保证会运行的代码路径中(不位于罕见行为之后)
  • 每个服务的语言都正确暴露 /opt/antithesis/catalog/ 或 /symbols/
  • setup_complete 信号已接入至少一个入口点
  • 对 antithesis/config/ 运行 snouty validate 成功
  • 所有构建镜像均面向 amd64(通过 snouty 所选引擎上的 image inspect 验证)
  • 构建使用了 compose CLI 和 snouty doctor 报告的引擎
  • 每个服务都在其环境中设置了 NO_COLOR=1(通过 docker-compose.yaml 和/或 Dockerfile),防止容器输出中出现 ANSI 转义码
  • harness 已为 antithesis-workload 技能就绪——测试模板目录已存在或已为后续使用接线
  • 若用户要求启动运行,应使用 antithesis-launch 技能,而不是直接运行 snouty launch
  • 已向用户描述 sut-analysis.md 与 deployment-topology.md 中存在的任何研究来源,并在脚手架开始前确认(来源 frontmatter 格式定义于 antithesis-research 技能 references/scratchbook-setup.md)

技能版本

2026-09-23 a8fe900

限制

实际测试模板与断言定义不属于本技能范围,由 antithesis-workload 负责;运行提交由 antithesis-launch 负责。运行前需已具备研究产物与 snouty 环境,缺失时应先完成前置步骤。