在持续集成中运行 IntelliJ 检查
从持续集成中运行 IntelliJ 检查
IntelliJ IDEA 提供了多种功能,帮助我们在 IDE 中编写代码时通过“意图”(Intentions)来改进代码质量。这些意图可以批量使用,以检查整个源代码中的代码模式,甚至可以扩展到命令行分析或集成到持续集成流程中。本文将介绍 IntelliJ 的开箱即用功能,以及如何利用 Sensei 创建的自定义意图进行扩展。
IntelliJ 检查
IntelliJ 的检查功能驱动了 IDE 中许多动态报告的错误显示,例如:
- 检测可以转换为接口的抽象类,
- 识别可以改为局部变量的冗余类字段,
- 针对已弃用方法的调用发出警告,
- 等等。
这些检查会在 IDE 中高亮显示匹配的代码,并作为通常带有相关“快速修复”(QuickFix)功能的意图操作呈现。

当代码匹配检查规则时,IDE 的实时高亮显示有助于我们动态改进代码。在识别出代码问题后,使用 IntelliJ 的意图操作进行快速修复,可以强化更好的编码模式。
检查配置文件
检查可以在 IDE 内、命令行或持续集成流程中以批处理方式运行。
以批处理方式使用 IntelliJ 检查的关键在于使用“检查配置文件”(Inspections Profile)。
IntelliJ 拥有两个默认的检查配置文件:一个存储在项目中,另一个存储在 IDE 中。
可以创建新的检查配置文件来配置特定的插件或用例,例如:
- 仅运行 Checkstyle 实时扫描
- 运行特定的一组 Sensei 规则
- 运行 HTML 检查
可以在 IntelliJ 的首选项中启用或禁用配置文件中的检查项。首选项对话框也是了解可用检查范围的便捷途径。

通过“工具”图标,您可以复制现有配置文件并创建一个新配置文件,以收集特定的一组规则。

在 IDE 中运行检查配置文件
您可以通过 IDE 中的 `Analyze \ Inspect Code...` 菜单运行检查配置文件 (Inspection Profiles)。

“分析”功能允许您控制检查的运行范围,例如针对整个项目(包括或排除测试源),或针对特定的一组文件。

您也可以在此处管理检查配置文件,以创建或配置特定的配置文件。
在“指定检查范围”对话框中点击 [OK],IntelliJ 就会在定义的范围内运行配置文件中所有选定的检查项。
IntelliJ 会在 `Inspection Results` 选项卡中报告检查运行的结果。

来自 Secure Code Warrior 的 Sensei 插件允许您创建自定义的代码匹配方案。Sensei 与 IntelliJ 深度集成,使这些自定义方案的使用体验如同 IntelliJ 的意图操作 (Intention Actions) 一样自然。这意味着它们会作为检查项加载到 IntelliJ 中,并可以通过检查配置文件进行分组、启用或禁用。创建自定义检查配置文件,然后使用“分析检查代码”功能,是批量运行项目内 Sensei 方案的推荐方式。
从命令行运行检查配置文件
正如 JetBrains 文档所述,IntelliJ 支持从命令行运行检查:
- https://www.jetbrains.com/help/idea/working-with-the-ide-features-from-command-line.html
我主要使用 macOS,可以通过以下命令从命令行运行 IntelliJ 的单个实例:
open -na "IntelliJ IDEA CE.app"
为了更方便地执行,我将其添加到了 shell 脚本中。
vi /usr/local/bin/idea
脚本内容来自 IntelliJ 提供的官方文档。
#!/bin/sh
open -na "IntelliJ IDEA CE.app" --args "$@"
然后我将其设为可执行文件,以简化命令行检查流程。
chmod 755 /usr/local/bin/idea
IntelliJ 官方文档描述的检查命令通用格式如下:
idea inspect <project> <inspection-profile> <output></output></inspection-profile></project>
[<options>]</options>
在实际操作中,我使用了完整路径,且无需任何选项:
idea inspect /Users/user/GitHub/sensei-blog-examples /Users/user/GitHub/sensei-blog-examples/.idea/inspectionProfiles/senseiprofile.xml /Users/user/GitHub/sensei-blog-examples/scan-results
此命令将运行我在 `senseiprofile` 中添加的所有检查,并将结果报告至 `scan-results` 文件夹中。

查看检查结果
正如稍后将看到的,我们可以在持续集成(CI)流程中报告这些结果。
我们也可以直接在 IntelliJ 中使用 `Analyse \ View Offline Inspection Results…`(分析 \ 查看离线检查结果)功能来查看这些结果。

这会将结果加载到“检查结果”(Inspection Results)选项卡中。

JetBrains 官网对此有官方文档说明:
- https://www.jetbrains.com/help/idea/command-line-code-inspector.html#inspection-results
如果命令行执行已集成到持续集成流程中,且评审人员需要查看任何检查结果条目的完整源代码上下文,则可以在代码评审过程中使用此功能。
持续集成中的检查配置文件
将命令行检查添加到持续集成时,我们通常希望自动生成报告,目前有多种方案可供选择。
TeamCity 为持续集成中的检查配置文件提供了开箱即用的支持。
- https://www.jetbrains.com/help/teamcity/inspections.html
Jenkins Warnings NG 插件支持将 IntelliJ 检查的命令行输出作为报告格式之一。
- https://github.com/jenkinsci/warnings-ng-plugin
- https://github.com/jenkinsci/warnings-ng-plugin/blob/master/SUPPORTED-FORMATS.md
社区项目(例如 `idea CLI Inspector`)也支持在其他 CI 工具中使用检查配置文件,例如:
- https://github.com/bentolor/idea-cli-inspector
随着 JetBrains Qodana 项目的推出,检查配置文件在 CI 流程中的应用前景将更加广阔。Qodana 项目是 IntelliJ 的无头(headless)版本,并提供了官方的 Github Actions 和 Docker 镜像。
- https://github.com/JetBrains/Qodana
Qodana 目前处于测试阶段,但 Sensei 团队正在密切关注,旨在将其打造为官方支持的平台,以便在持续集成流程中运行 Sensei 规则。
总结
意图操作(Intention Actions)使我们能够在 IDE 中强化编码模式,并在编码出错时快速进行修复。
检查配置文件(Inspection Profiles)允许我们将这些操作汇总到配置文件中,并通过“分析并检查代码”(Analyze and Inspect Code)操作进行批量运行。当我们发现某种模式并希望确认代码库中其他位置是否存在类似问题时,此功能非常有用。
检查配置文件可以通过命令行运行,甚至可以集成到持续集成流程中,从而支持“信任但验证”的模式,并及时捕获任何意外的疏漏。
以上所有功能均为 IntelliJ 内置,而 JetBrains 正通过引入 Qodana 来不断优化其持续集成流程。
Sensei 配方可加载至 IntelliJ 中,作为原生意图操作运行,并能汇总到检查配置文件中,从而通过“检查代码”功能支持批量检测,并利用 JetBrains 官方提供的命令行执行功能实现持续集成支持。
---
您可以在 IntelliJ 中安装 Sensei:通过“Preferences \ Plugins”(Mac)或“Settings \ Plugins”(Windows)进入插件页面,搜索“sensei secure code”即可安装。
如果您想尝试从命令行运行 IntelliJ 项目,可以在 Secure Code Warrior 的 GitHub 账号下的 `sensei-blog-examples` 仓库中找到本文使用的项目。您可以尝试创建一个仅运行 Sensei 规则的配置文件,快来试试吧:
https://github.com/securecodewarrior/sensei-blog-examples
在 AI 驱动的开发成果发布前实现有效治理
评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。
探索更多博客
获取有关安全编码、人工智能治理和软件风险管理的专家内容。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
在产品发布前确保 AI 驱动的开发安全
洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。



.avif)