Skip to main content
代码扫描是指一个 Devin 会话及其启动的 child 会话读取一个或多个仓库、报告发现项,并可通过 拉取请求 修复这些问题。安全扫描请参阅 Security Swarm,本页介绍其他 scan type。
运行扫描前:
  • 你需要具备使用代码扫描权限,以及使用 Devin 会话的权限。请参阅访问与权限
  • 你的组织必须拥有待扫描仓库的访问权限。

使用 /scan 启动扫描

  1. 在 composer 中输入 /scan,后面跟上你想查找的内容,并提及要扫描的仓库。例如:/scan find N+1 queries in @acme/api。你在 composer 中选中的仓库也会一并纳入。
  2. 发送消息。Devin 会启动一个新会话来配置扫描并将其打开。如果你只发送了 /scan,Devin 会给出一些示例扫描 (例如查找缓慢的数据库查询或未使用的代码) ,并询问你想查找什么。
  3. Devin 会根据你的请求选择 scan type,并用一句话说明,例如它将配置一个只查找 camelCase 变量名的自定义扫描。如果你想要别的方案,回复即可。
  4. Devin 会显示一张 Code scan setup 卡片。确认要扫描的 Repositories,也可以在 What should the scan focus on? 下补充指导。如果你没有提及仓库,Devin 会根据你最近的拉取请求,预选你参与最多的那个仓库。
  5. 点击 Start scan。只有在你提交该卡片后,Devin 才会创建扫描,随后分享该扫描会话的链接。若要取消配置,请点击 Dismiss
你无需自己挑选 scan type 或配置扫描。覆盖整个领域的请求 (例如对某个仓库进行性能扫描) 会使用匹配的 scan type;范围更窄或目标不同的请求 (例如查找 memory 泄漏) 则会使用聚焦于你所描述内容的 Custom 扫描。 非安全类扫描完成后,Devin 会通过 Slack 私信向你发送发现项摘要,除非你指定了其他通知方式或不接收通知。发送 Slack 消息需要你的组织的 Slack 集成允许会话发送私信。
非安全类扫描以正常投入程度无人值守运行。投入程度选项以及交互模式 (Devin 会暂停,以便你在调查前审阅 threat model) 仅适用于安全扫描

Scan types

如需排查 vulnerabilities 和攻击面,请使用 Security Swarm scan。

审查并修复发现项

在启动扫描的会话中,或在该扫描的主会话中打开 Findings 选项卡,即可逐项处理发现项。处于 Open 状态的发现项按阶段分组:
  • Unassigned — 尚未启动修复会话。
  • Assigned — 已启动修复会话,但还没有打开的 拉取请求。
  • PR open — 该发现项已有打开的 拉取请求。
对于每个发现项,你可以:
  • Assign to Devin — 启动一个 Devin 会话来修复该发现项,并提交 拉取请求。点击 Open session 跟踪处理进展,点击 Open PR 审查结果。
  • Dismiss — 移除无需处理的发现项。
扫描运行期间,扫描主会话中的 Findings 选项卡还提供 Pause scanResume scanKill scan。使用这些控件需要 Manage code scans 权限。

规模化扫描

Scan new commits

任何类型的扫描完成后,在 Findings 选项卡中点击 Scan new commits,即可启动一次增量运行,仅扫描自该扫描上次运行完成以来新增的提交。此次运行沿用该扫描的现有配置,并将发现项归入同一个扫描。扫描正在运行时或归档后不会显示该按钮,且使用该按钮需要 Manage code scans 权限。如果没有新的提交,则不会启动运行。 你也可以在会话中让 Devin 扫描某个现有扫描的新提交。

自动化

自动化 可以按计划或在事件触发时运行任意类型的扫描。选择 Code scan agent 类型,然后在 Scan 下:
  • 选择 Create a new scan,每次自动化触发时都会启动一次全新扫描。指定仓库、扫描类型和 Profile。非安全类扫描类型需要同类型的 scan profile
  • 选择一个已有扫描,每次自动化触发时扫描其新增的提交。该扫描必须已完成过一次运行。
由自动化启动的扫描以无人值守方式运行。参见 从自动化启动扫描

API

Code Scans API 可以在不使用 web app 的情况下启动扫描、轮询扫描状态并读取发现项。当你通过 API 启动非安全类扫描时,必须传入该 scan type 对应 Profile 的 profile_idscan_type 默认取该 Profile 的类型。通过 API 启动的扫描不支持交互。