这篇讲拉取请求上的安全检查结果怎么看,每一句说明是什么意思。看完你可以在 状态检查 里读 AngusSecurity 这一行是成功还是失败,再点 打开仓安全详情,看是哪个文件或哪条依赖有问题。
下面以仓库 xlliu/e2e-license-gate 的拉取请求 #1 为例。#1 的 AngusSecurity 现在是成功,说明文字是「提交 1f78310a 的漏洞门禁与许可证门禁均已通过」。这里的「门禁」指达到条件就拦住合并的规则:漏洞门禁按漏洞数量判断,许可证门禁按依赖使用的开源许可证判断。拉取请求里只显示这一句结论,明细都在仓库安全详情页。
安全检查在团队版、企业版和云服务中提供,并且需要先接入 AngusSecurity。下面只查看已有的扫描结果,不需要点 开始扫描,也不需要修改发现的处置状态。
1. 结论在哪里
打开拉取请求后,停留在 对话 页签,页面中部有一张 状态检查 卡片。状态检查汇总了拉取请求上的各项自动检查,每一项占一行,显示进行中、成功或失败;安全检查这一项的名称是 AngusSecurity。
和其他检查相比,AngusSecurity 这一行多了两样内容:
- 名称下面的说明文字,写的是这次判定的原因。
- 右侧的 打开仓安全详情,点击后进入这个仓库的安全详情页。
以 #1 为例,它的标题是 e2e GIT-08 pending gate,已经从 e2e-git08 合并进 main,页面地址是 https://git.anguskit.com/pulls/xlliu/e2e-license-gate/1。

同一仓库里已经合并的 #4 显示的是另一句成功文案:「提交 d3ebc5ab 的漏洞门禁已通过」。它少了许可证门禁,是因为 #4 的检查采用的是后来一次跳过了许可证检查的扫描。这两种成功文案,下一节的表格里都有解释。
2. 每种状态是什么意思
徽章上的 进行中、成功、失败 只表示检查状态,同一个徽章可能对应好几种原因,所以要看说明文字才能分清。下表列出了产品里的原句,其中 {8 位} 表示提交号的前 8 位,{n} 表示数量:
| 徽章 | 说明文字 | 含义 |
|---|---|---|
| 进行中 | 等待对提交 {8 位} 的安全检查 | 这个提交还没有检查任务 |
| 进行中 | 提交 {8 位} 的安全检查进行中 | 任务在排队或正在扫描 |
| 进行中 | 提交 {8 位} 的检查结果不完整,请重新检查 | 扫描结果不完整,需要重新扫描 |
| 进行中 | 还没有可检查的提交 | 拉取请求上还没有提交号 |
| 失败 | 提交 {8 位} 的安全检查失败,请重新检查 | 扫描任务本身执行失败 |
| 失败 | 漏洞门禁未通过:严重 {n}、高危 {n}、中危 {n}、低危 {n} | 漏洞数量达到仓库设定的阈值 |
| 失败 | 许可证门禁未通过 | 许可证门禁已开启,这次许可证检查没通过 |
| 失败 | 许可证门禁已启用,但这次检查没有包含许可证合规 | 许可证门禁已开启,但这次扫描没查许可证 |
| 成功 | 提交 {8 位} 的漏洞门禁已通过 | 漏洞未达阈值,许可证门禁没参与判定 |
| 成功 | 提交 {8 位} 的漏洞门禁与许可证门禁均已通过 | 两道门禁都通过,#1 就是这一句 |
结合这个仓库,还有几点需要说明:
- 结论只采用这个提交最新一次已完成的扫描。如果往源分支推送了新提交,还没合并的拉取请求会回到「等待对提交 … 的安全检查」,不会沿用上一个提交的结论。
- 漏洞阈值按优先级取值:仓库自己设置了就用仓库的;仓库没设置就用租户默认值;租户也没设置时,默认是 高危。以本仓库为例,租户默认是 低危,但
e2e-license-gate自己设成了 高危,所以按高危判定。阈值是高危时只统计严重和高危两级,即使中危、低危的数量不为 0,这一行仍可能显示成功。 - 代码质量 的结果不参与这一行的判定。
- 示例里的 #1、#4 都显示成功,但仓库概览上仍写着「许可证门禁未通过,拒绝合并」,原因是仓库里还留着一条处于开放状态的
GPL-3.0-only许可证发现。已经合并的拉取请求,检查行不会因为后来出现的发现而自动改写。
3. 点进去看具体问题
点 打开仓安全详情,会进入仓库安全详情页,地址是 https://git.anguskit.com/security/repos/xlliu/e2e-license-gate,默认显示 概览。以这个仓库为例,分数是 95,严重、高危、中危、低危、密钥、质量的数量都是 0,许可风险是 1。
详情页的页签依次是 概览、漏洞、依赖、密钥、许可合规、代码质量、扫描历史、设置。这个仓库当前开放的发现都在 许可合规 页签里,共两条:高危的 GPL-3.0-only,类别是强互惠;低危的 MIT,类别是宽松。许可证类别描述的是使用条件的松紧:强互惠许可证(如 GPL)要求分发软件时,把相关代码也按同样的许可证公开;宽松许可证(如 MIT)基本只要求保留版权声明,闭源产品也可以使用。
点开高危的那一条,会弹出一个详情抽屉(从页面侧边滑出的面板),里面包括:
- 位置:
package.json,组件是e2e-with-gpl@1.0.0。 - 许可证:
GPL-3.0-only,类别是 强互惠。 - 描述:
Declared by project manifest,意思是这个许可证由项目清单文件声明。 - 分支 / 提交:
e2e-git07 @591d671。 - 处置状态:开放。处置状态用来记录团队对这条发现的处理结论,可选值还有已知悉、已修复、已抑制、误报。每次修改都会留下处置记录,所以只是查看结果时,保持 开放 即可。
- 两个入口:在代码中查看 和 在安全台打开。

修复版本 只在发现本身带有可升级的版本时才出现,一般只有依赖漏洞才有;这条是许可证发现,所以抽屉里没有修复版本。如果打开的是密钥类发现,页面会提示「密钥类 Finding 默认不展示明文片段,请在安全台查看详情。」
另外,侧栏的 安全 是跨仓库的安全台,可以集中查看所有仓库的结果,页签是 仓库风险、漏洞、密钥、许可合规、代码质量、扫描历史。
4. 看不到这一行时怎么排查
| 你看到的 | 原因 | 怎么处理 |
|---|---|---|
| 「尚未接入 AngusSecurity」 | 集成没开通 | 系统管理员到 管理 → 安全设置 开通 |
| 「尚未运行安全扫描」 | 集成已开通,但这个仓库从没扫描过 | 打开自动扫描,或由仓库管理员手动扫描一次 |
状态检查 里没有 AngusSecurity |
提交还没有已完成的扫描,仓库也没打开 未通过时拒绝合并 | 打开自动扫描后再推送一次 |
| 一直是「等待对提交 … 的安全检查」 | 这个提交没有扫描任务 | 打开 本仓自动安全扫描 后再推送新提交,或对源分支手动扫描 |
| 侧栏没有 安全 | 当前是社区版 | 安全检查在团队版、企业版和云服务中提供 |
示例实例的集成已经开通。表中有两种情况需要展开说明。第一种是 状态检查 里没有 AngusSecurity:只有同时满足三个条件时才会这样,即这个提交还没有已完成的扫描、仓库没打开 未通过时拒绝合并、拉取请求上也还没有这项检查。反过来,如果扫描在创建拉取请求之前就已经完成,即使没开拒绝合并,拉取请求也会挂上已有的结论。第二种是一直停在等待:自动扫描关闭时,新提交不会自动生成扫描任务,所以说明会一直停在「等待对提交 … 的安全检查」。
除了命令行推送,在网页上修改文件并提交、在拉取请求页点击合并,也会让目标分支上有新提交,从而把扫描任务发给 AngusSecurity。不过自动扫描关闭时,这些操作同样不会触发扫描。
常见问题
AngusSecurity 失败了,还能合并吗?
示例仓库打开了 未通过时拒绝合并。打开这个开关后,合并接口会拒绝检查未通过的拉取请求,提示是「安全检查未通过,不能合并:」,后面跟着这一行的说明文字。直接把分支合并进目标分支,也受同样的限制。
网页上的合并按钮能不能点,还要另外看分支保护(为分支设置的合并规则)。分支保护规则还没加载完时,页面上任何非成功的检查都会先让按钮不可用,提示「所有必需的状态检查必须通过」。规则加载完以后,如果没有把某项检查指定为必需,按钮不会因为这一行失败而变灰;但点击合并后,服务端仍会按 未通过时拒绝合并 拒绝。
评审人需要等安全检查结束才能开始评审吗?
不需要。评审和安全检查互不依赖,各自进行。以 #1 为例,它没有指定审查者,而检查结果已经是成功。
能不能在拉取请求里直接看到漏洞列表?
不能。拉取请求里只显示这一行结论和 打开仓安全详情,具体的文件、依赖和许可证发现都在仓库安全详情页里。
小结
拉取请求 状态检查 里的 AngusSecurity 行,给出的是该提交最新一次扫描的门禁结论。徽章只说明进行中、成功还是失败,原因要看说明文字,从中可以分清是扫描本身失败、漏洞数量达到阈值,还是许可证没通过。要看具体问题,就点 打开仓安全详情 进入仓库安全详情页。以 xlliu/e2e-license-gate 为例,#1 显示「提交 1f78310a 的漏洞门禁与许可证门禁均已通过」,而仓库当前的开放发现是位于 package.json 的 GPL-3.0-only,类别是强互惠。
安全检查在团队版、企业版和云服务中提供,社区版没有 安全 菜单。
结论: 拉取请求状态检查里的 AngusSecurity 行给出该提交最新一次扫描的门禁结论;要知道具体是哪个文件或依赖有问题,点 打开仓安全详情 进入仓库安全详情页查看。