jenkinsci/git-forensics-plugin
GitHub: jenkinsci/git-forensics-plugin
一款 Jenkins 插件,用于在 CI/CD 流水线中挖掘和分析 Git 仓库的提交历史、代码变动统计及文件演变趋势。
Stars: 41 | Forks: 28
# Git Forensics Jenkins 插件
[](https://gitter.im/jenkinsci/warnings-plugin?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://github.com/jenkinsci/git-forensics-plugin/actions/workflows/codeql.yml)
这个 Git Forensics Jenkins 插件可以从 Git 仓库中挖掘和分析数据。它实现了 [Jenkins Forensics API 插件](https://github.com/jenkinsci/forensics-api-plugin) 的所有扩展点,并提供以下服务:
- **Blames**:提供用于 `git blame` 的 API,以显示文件的各部分分别是被哪些作者在哪个 Git 版本中修改的。此信息可用于发现导致问题代码的原始 commit。
- **文件统计**:以 Code as a Crime Scene [Adam Tornhill, November 2013] 的方式,增量收集所有仓库文件的全局 commit 统计信息。这包括:
- commit 数量
- 不同作者数量
- 创建时间
- 最后修改时间
- 代码行数(来自 commit 详情)
- 代码改动(自创建以来更改的行数)
- **Commit 跟踪**:跟踪作为构建一部分的所有新 commit。
- **Commit 统计**:收集单个构建或一系列构建(例如,一个 Pull Request 的所有 commit)中所有新 commit 的统计信息。这包括:
- commit 数量
- 已更改文件数量
- 新增和删除的行数
- **参考构建**:为给定的构建寻找一个参考构建,用于计算相对结果,以展示当前构建的分支与目标分支合并后会发生哪些变化。
- **仓库浏览器**:为 commit 提供一个 [RepositoryBrowser](https://javadoc.jenkins.io/hudson/scm/RepositoryBrowser.html)。由于原始的 Jenkins 接口没有提供 API 来生成指向简单 commit 的链接,该装饰器添加了此类功能。请注意,此 API 不仅仅获取此类链接,还会将这些链接渲染为 HTML `a` 标签。
## 文件统计信息
如果您启用后构建步骤 *Mine SCM repository*,Git Forensics 插件将以 Code as a Crime Scene [Adam Tornhill, November 2013] 的方式收集所有仓库文件的 commit 统计信息。如果您使用的是 pipeline,则可以使用 `mineRepository` 步骤启动仓库挖掘。此步骤有一个 `scm` 参数,可用于过滤要使用的 SCM。请注意,如果您的 Git 仓库非常大,扫描仓库可能会花费一些时间。仓库的挖掘是增量完成的,也就是说,对于新的构建,只会分析新增的 commit,从而使整体运行时间大大缩短。
您可以通过启用 pipeline 步骤 `mineRepository` 来使用此功能。
构建完成后,您将在构建主页面上找到仓库挖掘的摘要:

在此摘要中,您将看到总共处理了多少个文件(包含总 LOC 和代码改动统计),以及当前构建中记录了多少个新 commit。您还将看到这些新 commit 中增加和删除的行数。
从摘要中,您可以导航到单独的插件视图,其中显示了所有仓库文件的详细信息。在此视图中,您可以看到聚合图表,分别显示有多少文件拥有较多或较少的作者或 commit。此外,您还可以在表格中查看所有仓库文件的单独统计信息:
- commit 数量
- 不同作者数量
- 创建时间
- 最后修改时间
- 代码行数(来自 commit 详情)
- 代码改动(自创建以来更改的行数)
使用表格的过滤或排序功能,可以突出显示项目中最重要的文件。

对于所有文件,还提供了一个额外的详细视图,显示每个 commit 添加和删除的行数。在此视图中,您可以在顶部看到一个图表,显示每个 commit 添加(绿色)和删除(红色)的行数。底部的表格列出了更改所选文件的各个 commit。从此表格中,您可以直接导航到仓库的 Git commit 详情(如果配置正确)。



在 Job 级别,挖掘步骤还为您的 Git commit 提供了趋势图。您可以从四种不同的趋势图中进行选择,请参阅下一节。
### 文件总数
文件总数趋势图仅统计您的仓库中随时间变化的文件数量。

### 总代码行数和改动
总代码行数和改动趋势图统计两种不同的行数信息:
- **代码行数**:仓库中源代码的总行数是通过将一段时间内仓库中增加的行数减去删除的行数来计算的。该结果代表了您项目中实际的代码量。
- **改动**:仓库中的源代码改动是通过将一段时间内仓库中删除和增加的行数的绝对值相加来计算的。该结果是源代码库中活动和开销的衡量标准。**改动**和**代码行数**之间的差距越小,在项目生命周期中更改或丢弃的代码就越少。

### 删除和新增的行数
删除和新增行数的趋势图展示了每次构建中新增或删除行数之间的差值。使用此图表,您的项目可以轻松发现代码更改较多或较少的高峰期。

### 作者、commit 和修改的文件数
最后,作者、commit 和修改文件数的趋势图展示了一些额外的信息,这些信息可能有助于保持您的项目处于良好状态。

## Commit 跟踪
Git Forensics 插件会自动跟踪使用 Git SCM 的构建中所包含的所有新 commit。利用此信息,其他插件可以搜索包含特定 commit 的构建。您可以在构建状态页面上看到此 commit 监听器的结果:

在那里您将看到新 commit 的数量,以及一个用于打开仓库浏览器以查看最新 commit 详情的链接。
## Commit 统计
对于 Pull Request(或者更一般地说:对于定义了参考构建的 Job),Git Forensics 插件会收集其中所有 commit 的统计摘要。
这包括 commit 数量、已更改文件的数量以及这些 commit 中新增和删除的行数。
此信息将作为每次构建的摘要提供:

对于未定义参考构建的构建,此信息也可用(请参阅下一节)。
在这种情况下,将显示自上一次成功构建以来的统计信息。
您可以通过启用 pipeline 步骤 `gitDiffStat` 来使用此功能。
在 Job 级别,此步骤还为您的 Git commit 提供了趋势图。您可以从以下两种趋势图中进行选择,请参阅下一节。
### 删除和新增的行数
删除和新增行数的趋势图展示了每次构建中新增或删除行数之间的差值。

### 作者、commit 和修改的文件数
此外,作者、commit 和修改文件数的趋势图直观展示了构建中的文件是以何种方式被更改的。

## 参考构建
几个报告构建统计信息(测试结果、代码覆盖率、指标、静态分析警告)的插件通常以两种不同的方式显示其报告:作为绝对报告(例如,测试或警告的总数、整体代码覆盖率)或作为相对增量报告(例如,新增的测试、增加或减少的覆盖率、新增或修复的警告)。为了计算相对增量报告,插件需要仔细选择另一个构建,以便将当前结果与其进行比较(即所谓的*参考构建*)。
对于构建 SCM 主分支的简单 Jenkins Job,将从同一 Job 的先前构建之一中选择参考构建。对于更复杂的分支源项目(即在连接的 Job 层次结构中构建多个分支和 Pull Request 的项目),从构建实际目标分支(即当前更改将合并到的分支)的 Job 中选择参考构建更有意义。在这里,人们通常关心的是分支或 Pull Request 相对于主分支(或任何其他目标分支)发生了哪些变化:例如,如果团队合并这些更改,代码覆盖率将如何变化。选择正确的参考构建并不容易,因为项目的主分支演化的频率通常比特定的功能或 Bug 修复分支要高得多。

发现参考构建的过程可以通过几个属性来配置。最重要的选项是 `referenceJob`:参考 Job 决定了项目的目标分支,所有的更改最终都将合并到该分支中。然后其他插件可以使用此 Job 中最合适的构建作为基准,生成相对构建报告,以展示给定更改的影响。在 [多分支 pipeline](https://www.jenkins.io/doc/book/pipeline/multibranch/#creating-a-multibranch-pipeline) 中,此名称将自动从 pipeline 配置中提取。如果您的 pipeline 使用了多个 SCM,您可以通过 `scm` 参数选择正确的 SCM。
您可以在构建详情页面上看到此计算的结果(以及重要的处理决策):

标签:JS文件枚举, 域名枚举, 网络安全研究