[{"data":1,"prerenderedAt":729},["ShallowReactive",2],{"navigation_docs_zh":3,"docs_zh_-zh-docs-features-deployment-verification":280,"docs_zh_-zh-docs-features-deployment-verification_surround":724},[4,18,51,254,267],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"入门",false,"/zh/docs/getting-started","zh/docs/1.getting-started",[10,14],{"title":11,"path":12,"stem":13},"简介","/zh/docs/getting-started/introduction","zh/docs/1.getting-started/1.introduction",{"title":15,"path":16,"stem":17},"快速开始","/zh/docs/getting-started/quick-start","zh/docs/1.getting-started/2.quick-start",{"title":19,"icon":6,"path":20,"stem":21,"children":22,"page":6},"功能","/zh/docs/features","zh/docs/2.features",[23,27,31,35,39,43,47],{"title":24,"path":25,"stem":26},"告警分诊","/zh/docs/features/alert-triage","zh/docs/2.features/2.alert-triage",{"title":28,"path":29,"stem":30},"事故调查","/zh/docs/features/incident-investigation","zh/docs/2.features/3.incident-investigation",{"title":32,"path":33,"stem":34},"部署验证","/zh/docs/features/deployment-verification","zh/docs/2.features/4.deployment-verification",{"title":36,"path":37,"stem":38},"数据探索","/zh/docs/features/data-exploration","zh/docs/2.features/5.data-exploration",{"title":40,"path":41,"stem":42},"知识库","/zh/docs/features/knowledges","zh/docs/2.features/6.knowledges",{"title":44,"path":45,"stem":46},"Castrel Proxy","/zh/docs/features/castrel-proxy","zh/docs/2.features/7.castrel-proxy",{"title":48,"path":49,"stem":50},"自动化","/zh/docs/features/automations","zh/docs/2.features/8.automations",{"title":52,"icon":6,"path":53,"stem":54,"children":55},"集成","/zh/docs/integrations","zh/docs/3.integrations/index",[56,57,62,67,72,77,81,85,89,94,99,104,109,113,117,122,127,131,136,141,146,151,156,160,165,170,174,178,183,188,193,198,203,208,212,216,220,224,229,234,239,244,249],{"title":52,"path":53,"stem":54},{"title":58,"path":59,"stem":60,"icon":61},"Prometheus","/zh/docs/integrations/prometheus","zh/docs/3.integrations/1.prometheus","i-simple-icons-prometheus",{"title":63,"path":64,"stem":65,"icon":66},"AWS","/zh/docs/integrations/aws","zh/docs/3.integrations/10.aws","i-simple-icons-amazonwebservices",{"title":68,"path":69,"stem":70,"icon":71},"阿里云（Aliyun）","/zh/docs/integrations/aliyun","zh/docs/3.integrations/12.aliyun","i-simple-icons-alibabacloud",{"title":73,"path":74,"stem":75,"icon":76},"腾讯云（Tencent Cloud）","/zh/docs/integrations/tencent-cloud","zh/docs/3.integrations/13.tencent-cloud","i-lucide-plug",{"title":78,"path":79,"stem":80,"icon":76},"华为云（Huawei Cloud）","/zh/docs/integrations/huaweicloud","zh/docs/3.integrations/14.huaweicloud",{"title":82,"path":83,"stem":84,"icon":76},"火山引擎（Volcengine）","/zh/docs/integrations/volcengine","zh/docs/3.integrations/15.volcengine",{"title":86,"path":87,"stem":88,"icon":76},"轻帆云（QingFanYun）","/zh/docs/integrations/qingfanyun","zh/docs/3.integrations/16.qingfanyun",{"title":90,"path":91,"stem":92,"icon":93},"Grafana","/zh/docs/integrations/grafana","zh/docs/3.integrations/17.grafana","i-simple-icons-grafana",{"title":95,"path":96,"stem":97,"icon":98},"VictoriaMetrics","/zh/docs/integrations/victoriametrics","zh/docs/3.integrations/18.victoriametrics","i-simple-icons-victoriametrics",{"title":100,"path":101,"stem":102,"icon":103},"New Relic","/zh/docs/integrations/new-relic","zh/docs/3.integrations/19.new-relic","i-simple-icons-newrelic",{"title":105,"path":106,"stem":107,"icon":108},"Elasticsearch","/zh/docs/integrations/elasticsearch","zh/docs/3.integrations/2.elasticsearch","i-simple-icons-elasticsearch",{"title":110,"path":111,"stem":112,"icon":76},"Zabbix","/zh/docs/integrations/zabbix","zh/docs/3.integrations/20.zabbix",{"title":114,"path":115,"stem":116,"icon":76},"监控宝（JianKongBao）","/zh/docs/integrations/jiankongbao","zh/docs/3.integrations/21.jiankongbao",{"title":118,"path":119,"stem":120,"icon":121},"PagerDuty","/zh/docs/integrations/pagerduty","zh/docs/3.integrations/22.pagerduty","i-simple-icons-pagerduty",{"title":123,"path":124,"stem":125,"icon":126},"Sentry","/zh/docs/integrations/sentry","zh/docs/3.integrations/23.sentry","i-simple-icons-sentry",{"title":128,"path":129,"stem":130,"icon":76},"Freshworks / Freshservice","/zh/docs/integrations/freshworks","zh/docs/3.integrations/24.freshworks",{"title":132,"path":133,"stem":134,"icon":135},"Linear","/zh/docs/integrations/linear","zh/docs/3.integrations/25.linear","i-simple-icons-linear",{"title":137,"path":138,"stem":139,"icon":140},"ClickHouse","/zh/docs/integrations/clickhouse","zh/docs/3.integrations/26.clickhouse","i-simple-icons-clickhouse",{"title":142,"path":143,"stem":144,"icon":145},"Kubernetes","/zh/docs/integrations/kubernetes","zh/docs/3.integrations/27.kubernetes","i-simple-icons-kubernetes",{"title":147,"path":148,"stem":149,"icon":150},"Terraform Cloud / HCP Terraform","/zh/docs/integrations/terraform","zh/docs/3.integrations/28.terraform","i-simple-icons-terraform",{"title":152,"path":153,"stem":154,"icon":155},"Jenkins","/zh/docs/integrations/jenkins","zh/docs/3.integrations/29.jenkins","i-simple-icons-jenkins",{"title":157,"path":158,"stem":159,"icon":93},"Grafana Loki","/zh/docs/integrations/grafana-loki","zh/docs/3.integrations/3.grafana-loki",{"title":161,"path":162,"stem":163,"icon":164},"Ansible / AWX","/zh/docs/integrations/ansible","zh/docs/3.integrations/30.ansible","i-simple-icons-ansible",{"title":166,"path":167,"stem":168,"icon":169},"GitLab","/zh/docs/integrations/gitlab","zh/docs/3.integrations/31.gitlab","i-simple-icons-gitlab",{"title":171,"path":172,"stem":173,"icon":76},"钉钉（DingTalk）","/zh/docs/integrations/dingtalk","zh/docs/3.integrations/32.dingtalk",{"title":175,"path":176,"stem":177,"icon":76},"飞书（Feishu / Lark）","/zh/docs/integrations/feishu","zh/docs/3.integrations/33.feishu",{"title":179,"path":180,"stem":181,"icon":182},"Telegram","/zh/docs/integrations/telegram","zh/docs/3.integrations/34.telegram","i-simple-icons-telegram",{"title":184,"path":185,"stem":186,"icon":187},"Email","/zh/docs/integrations/email","zh/docs/3.integrations/35.email","i-simple-icons-gmail",{"title":189,"path":190,"stem":191,"icon":192},"微信企业机器人（Weixin Clawbot）","/zh/docs/integrations/weixin-clawbot","zh/docs/3.integrations/36.weixin-clawbot","i-simple-icons-wechat",{"title":194,"path":195,"stem":196,"icon":197},"Notion","/zh/docs/integrations/notion","zh/docs/3.integrations/37.notion","i-simple-icons-notion",{"title":199,"path":200,"stem":201,"icon":202},"Confluence","/zh/docs/integrations/confluence","zh/docs/3.integrations/38.confluence","i-simple-icons-confluence",{"title":204,"path":205,"stem":206,"icon":207},"Google Docs","/zh/docs/integrations/google-docs","zh/docs/3.integrations/39.google-docs","i-simple-icons-googledocs",{"title":209,"path":210,"stem":211,"icon":93},"Grafana Tempo","/zh/docs/integrations/grafana-tempo","zh/docs/3.integrations/4.grafana-tempo",{"title":213,"path":214,"stem":215,"icon":76},"钉钉文档（DingTalk Docs）","/zh/docs/integrations/dingtalk-docs","zh/docs/3.integrations/40.dingtalk-docs",{"title":217,"path":218,"stem":219,"icon":76},"LDAP","/zh/docs/integrations/ldap","zh/docs/3.integrations/41.ldap",{"title":221,"path":222,"stem":223,"icon":76},"Dify","/zh/docs/integrations/dify","zh/docs/3.integrations/42.dify",{"title":225,"path":226,"stem":227,"icon":228},"自定义 MCP（Custom MCP）","/zh/docs/integrations/custom-mcp","zh/docs/3.integrations/43.custom-mcp","i-simple-icons-anthropic",{"title":230,"path":231,"stem":232,"icon":233},"GitHub","/zh/docs/integrations/github","zh/docs/3.integrations/5.github","i-simple-icons-github",{"title":235,"path":236,"stem":237,"icon":238},"Slack","/zh/docs/integrations/slack","zh/docs/3.integrations/6.slack","i-simple-icons-slack",{"title":240,"path":241,"stem":242,"icon":243},"Vercel","/zh/docs/integrations/vercel","zh/docs/3.integrations/7.vercel","i-simple-icons-vercel",{"title":245,"path":246,"stem":247,"icon":248},"Graylog","/zh/docs/integrations/graylog","zh/docs/3.integrations/8.graylog","i-simple-icons-graylog",{"title":250,"path":251,"stem":252,"icon":253},"Datadog","/zh/docs/integrations/datadog","zh/docs/3.integrations/9.datadog","i-simple-icons-datadog",{"title":255,"path":256,"stem":257,"children":258,"page":6},"更多","/zh/docs/more","zh/docs/4.more",[259,263],{"title":260,"path":261,"stem":262},"路线图","/zh/docs/more/roadmap","zh/docs/4.more/1.roadmap",{"title":264,"path":265,"stem":266},"支持","/zh/docs/more/support","zh/docs/4.more/2.support",{"title":268,"path":269,"stem":270,"children":271,"page":6},"安全","/zh/docs/security","zh/docs/5.security",[272,276],{"title":273,"path":274,"stem":275},"隐私政策","/zh/docs/security/privacy-policy","zh/docs/5.security/1.privacy-policy",{"title":277,"path":278,"stem":279},"服务条款","/zh/docs/security/terms-of-service","zh/docs/5.security/2.terms-of-service",{"id":281,"title":32,"body":282,"description":717,"extension":718,"links":719,"meta":720,"navigation":721,"path":33,"seo":722,"stem":34,"__hash__":723},"docs_zh/zh/docs/2.features/4.deployment-verification.md",{"type":283,"value":284,"toc":708},"minimark",[285,289,294,297,313,316,319,325,328,346,349,354,357,369,372,377,380,412,417,420,434,445,449,452,457,460,471,476,479,515,520,523,537,542,545,556,561,564,575,578,628,631,640,658,696,700,704],[286,287,288],"p",{},"部署验证是 Castrel 的一项强大能力，它可以自动识别部署失败并即时给出根因分析，让你不再需要在多个工具之间来回翻日志和代码变更。",[290,291,293],"h2",{"id":292},"什么是部署验证","什么是部署验证？",[286,295,296],{},"部署验证是一套由 AI 驱动的部署失败诊断系统，它通过 GitHub Webhook 自动监控你的 CI/CD 流水线。当部署失败时，Castrel 会自动：",[298,299,300,304,307,310],"ul",{},[301,302,303],"li",{},"识别部署工具（例如 Vercel）",[301,305,306],{},"拉取并分析部署日志",[301,308,309],{},"将错误与代码变更做关联",[301,311,312],{},"生成结构化诊断报告，并给出可执行的修复建议",[286,314,315],{},"这会把原本通常需要 15 到 30 分钟的手动排查过程，缩短为 2 到 5 分钟的自动化诊断。",[290,317,318],{"id":318},"如何使用部署验证",[286,320,321],{},[322,323,324],"strong",{},"步骤 1：连接 GitHub 仓库",[286,326,327],{},"配置 GitHub Webhook 集成，以便自动检测部署事件：",[329,330,331,340,343],"ol",{},[301,332,333,334,337,338],{},"在 Castrel 中进入 ",[322,335,336],{},"Integrations"," > ",[322,339,230],{},[301,341,342],{},"授权 Castrel 访问你的仓库",[301,344,345],{},"为需要监控的仓库启用部署事件 webhook",[286,347,348],{},"详细配置请在 Castrel 中的 GitHub 集成页面完成。",[286,350,351],{},[322,352,353],{},"步骤 2：连接部署平台",[286,355,356],{},"为你的部署平台授权 MCP 工具：",[329,358,359,363,366],{},[301,360,333,361],{},[322,362,336],{},[301,364,365],{},"连接你的部署平台（例如 Vercel）",[301,367,368],{},"授予读取日志所需的权限",[286,370,371],{},"如果部署失败时缺少授权，Castrel 会提示你先完成相关配置，再继续做诊断。",[286,373,374],{},[322,375,376],{},"步骤 3：接收诊断报告",[286,378,379],{},"当部署失败时，Castrel 会自动分析并输出一份包含以下内容的诊断报告：",[329,381,382,388,394,400,406],{},[301,383,384,387],{},[322,385,386],{},"错误摘要","：错误类型、位置、消息以及严重级别",[301,389,390,393],{},[322,391,392],{},"问题代码","：触发失败的具体代码片段，并附带语法高亮",[301,395,396,399],{},[322,397,398],{},"根因分析","：将错误信息与代码变更关联起来，解释错误为什么发生",[301,401,402,405],{},[322,403,404],{},"修复建议","：可直接复制使用的具体代码示例",[301,407,408,411],{},[322,409,410],{},"相关文件","：本次变更中可能需要关注的文件列表",[286,413,414],{},[322,415,416],{},"步骤 4：修复并重新部署",[286,418,419],{},"根据诊断报告：",[329,421,422,425,428,431],{},[301,423,424],{},"查看根因分析，理解问题来源",[301,426,427],{},"复制建议修复代码，或按你的方式修复",[301,429,430],{},"提交并推送修复",[301,432,433],{},"如有需要，Castrel 还可以继续跟踪后续部署，验证修复是否生效",[286,435,436,437,440,441,444],{},"你也可以提供反馈（",[322,438,439],{},"Helpful"," / ",[322,442,443],{},"Not Helpful","），帮助 Castrel 持续改进诊断准确率。",[290,446,448],{"id":447},"castrel-如何验证部署","Castrel 如何验证部署",[286,450,451],{},"Castrel 会按以下流程系统性诊断每一次部署失败：",[286,453,454],{},[322,455,456],{},"1. 检测部署事件",[286,458,459],{},"当 GitHub 发来部署失败 webhook 后，Castrel 会自动：",[298,461,462,465,468],{},[301,463,464],{},"校验 webhook 签名，确保安全",[301,466,467],{},"提取关键元数据（仓库、部署 ID、commit SHA、分支）",[301,469,470],{},"创建异步诊断任务",[286,472,473],{},[322,474,475],{},"2. 识别部署工具",[286,477,478],{},"Castrel 会通过多种信号智能识别你使用的部署工具：",[298,480,481,491,500,506],{},[301,482,483,486,487],{},[322,484,485],{},"Bot 登录名","：例如 ",[488,489,490],"code",{},"vercel[bot]",[301,492,493,496,497],{},[322,494,495],{},"仓库主页 URL","：例如包含 ",[488,498,499],{},"vercel.app",[301,501,502,505],{},[322,503,504],{},"部署状态 URL","：根据目标 URL 模式识别",[301,507,508,511,512],{},[322,509,510],{},"仓库配置","：例如是否存在 ",[488,513,514],{},".vercel/project.json",[286,516,517],{},[322,518,519],{},"3. 获取日志并分析错误",[286,521,522],{},"通过 MCP 工具，Castrel 会：",[298,524,525,528,531,534],{},[301,526,527],{},"拉取完整的部署构建日志",[301,529,530],{},"使用 AI 识别日志中的错误模式",[301,532,533],{},"对错误做分类（编译、依赖、配置、运行时等）",[301,535,536],{},"判断错误严重程度，以及是否可以忽略",[286,538,539],{},[322,540,541],{},"4. 关联代码变更",[286,543,544],{},"Castrel 会通过 GitHub MCP 拉取 commit diff，并：",[298,546,547,550,553],{},[301,548,549],{},"将错误位置（文件名、行号）与变更文件匹配",[301,551,552],{},"分析代码改动与错误之间的因果关系",[301,554,555],{},"找出具体是哪几行代码引入了问题",[286,557,558],{},[322,559,560],{},"5. 生成报告",[286,562,563],{},"最后，Castrel 会生成结构化诊断报告，包括：",[298,565,566,569,572],{},[301,567,568],{},"明确的错误识别与分类",[301,570,571],{},"把错误与具体代码变更对应起来的根因分析",[301,573,574],{},"带示例代码的可执行修复建议",[290,576,577],{"id":577},"提升效果的小建议",[579,580,581,594],"table",{},[582,583,584],"thead",{},[585,586,587,591],"tr",{},[588,589,590],"th",{},"建议",[588,592,593],{},"说明",[595,596,597,608,618],"tbody",{},[585,598,599,605],{},[600,601,602],"td",{},[322,603,604],{},"把相关工具都接上",[600,606,607],{},"同时授权 GitHub 和部署平台（如 Vercel），才能拿到完整诊断信息",[585,609,610,615],{},[600,611,612],{},[322,613,614],{},"覆盖所有仓库",[600,616,617],{},"为所有需要监控的仓库配置 webhook，避免部署失败漏检",[585,619,620,625],{},[600,621,622],{},[322,623,624],{},"持续提供反馈",[600,626,627],{},"为诊断报告打分，帮助 Castrel 逐步提高准确率",[290,629,630],{"id":630},"常见问题",[632,633,635,636,639],"collapsible",{"name":634},"目前支持哪些部署工具？","Castrel 当前支持 Vercel 和 GitHub Deployment。整体架构是可扩展的，后续可以继续接入更多部署平台。未来计划可查看 ",[637,638,260],"a",{"href":261},"。",[632,641,643,646,652],{"name":642},"Castrel 如何识别根因？",[286,644,645],{},"Castrel 会结合两种分析方式：",[286,647,648,651],{},[322,649,650],{},"日志分析"," 负责从部署日志中提取错误类型、位置和堆栈信息。",[286,653,654,657],{},[322,655,656],{},"代码关联"," 会把这些错误与触发本次部署的代码变更逐项匹配，从因果关系上判断是哪次改动引入了问题。",[632,659,661,664],{"name":660},"Castrel 能诊断哪些错误？",[286,662,663],{},"Castrel 可以诊断多种部署失败类型：",[298,665,666,672,678,684,690],{},[301,667,668,671],{},[322,669,670],{},"编译错误","：TypeScript/JavaScript 语法错误、类型不匹配",[301,673,674,677],{},[322,675,676],{},"依赖错误","：包安装失败、版本冲突",[301,679,680,683],{},[322,681,682],{},"配置错误","：构建配置问题、环境变量缺失",[301,685,686,689],{},[322,687,688],{},"运行时错误","：构建过程中代码执行异常",[301,691,692,695],{},[322,693,694],{},"网络错误","：构建过程中的超时问题",[632,697,699],{"name":698},"我能自定义哪些错误可以忽略吗？","这个能力目前还没有开放，但已经在规划中。后续会支持团队根据自己的需求，自定义哪些错误属于可忽略范围。",[632,701,703],{"name":702},"诊断通常需要多久？","通常在检测到部署失败后的 30 到 60 秒内即可完成诊断。这包括日志拉取、代码变更分析以及报告生成。代码库特别大或失败场景特别复杂时，可能会稍微久一些。",[632,705,707],{"name":706},"如果 Castrel 识别不出部署工具怎么办？","如果自动识别失败，Castrel 会提示你手动为该仓库指定部署工具。设置一次后，后续会记住这个偏好。",{"title":709,"searchDepth":710,"depth":710,"links":711},"",2,[712,713,714,715,716],{"id":292,"depth":710,"text":293},{"id":318,"depth":710,"text":318},{"id":447,"depth":710,"text":448},{"id":577,"depth":710,"text":577},{"id":630,"depth":710,"text":630},"通过分析日志、代码变更并生成可执行修复建议，自动诊断部署失败。","md",null,{},true,{"title":32,"description":717},"_zLVfMKtcCBdMVWYYMneJ5qXUPyc36FxWuoFYP3rws0",[725,727],{"title":28,"path":29,"stem":30,"description":726,"children":-1},"通过自动化根因分析与人机协作，更快完成事故调查。",{"title":36,"path":37,"stem":38,"description":728,"children":-1},"通过 AI 驱动的智能探索，自动发现并映射可观测性数据中的实体与关系。",1777027432389]