博客

在持续集成中运行 IntelliJ 检查

February 15, 2021
Alan Richardson
双手在笔记本电脑上打字,屏幕显示代码,文字内容为:通过 Sensei 精通安全编码。

从持续集成中运行 IntelliJ 检查

IntelliJ IDEA 提供了多种功能,帮助我们在 IDE 中编写代码时通过“意图”(Intentions)来改进代码质量。这些意图可以批量使用,以检查整个源代码中的代码模式,甚至可以扩展到命令行分析或集成到持续集成流程中。本文将介绍 IntelliJ 的开箱即用功能,以及如何利用 Sensei 创建的自定义意图进行扩展。

‍

IntelliJ 检查

IntelliJ 的检查功能驱动了 IDE 中许多动态报告的错误显示,例如:

  • 检测可以转换为接口的抽象类,
  • 识别可以改为局部变量的冗余类字段,
  • 针对已弃用方法的调用发出警告,
  • 等等。


这些检查会在 IDE 中高亮显示匹配的代码,并作为通常带有相关“快速修复”(QuickFix)功能的意图操作呈现。


Inspection Deprecated Api Usage Options


当代码匹配检查规则时,IDE 的实时高亮显示有助于我们动态改进代码。在识别出代码问题后,使用 IntelliJ 的意图操作进行快速修复,可以强化更好的编码模式。

检查配置文件

检查可以在 IDE 内、命令行或持续集成流程中以批处理方式运行。

以批处理方式使用 IntelliJ 检查的关键在于使用“检查配置文件”(Inspections Profile)。

IntelliJ 拥有两个默认的检查配置文件:一个存储在项目中,另一个存储在 IDE 中。

可以创建新的检查配置文件来配置特定的插件或用例,例如:

  • 仅运行 Checkstyle 实时扫描
  • 运行特定的一组 Sensei 规则
  • 运行 HTML 检查

可以在 IntelliJ 的首选项中启用或禁用配置文件中的检查项。首选项对话框也是了解可用检查范围的便捷途径。


Inspections Usage Of Api Marked For Removal


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


Tool Icon To Duplicate A Profile


在 IDE 中运行检查配置文件

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


Run An Inspection Profile Using The Analyze Or Inspect Code


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


Specify Inspection Scope


您也可以在此处管理检查配置文件,以创建或配置特定的配置文件。


在“指定检查范围”对话框中点击 [OK],IntelliJ 就会在定义的范围内运行配置文件中所有选定的检查项。

IntelliJ 会在 `Inspection Results` 选项卡中报告检查运行的结果。


IntelliJ Report The Results Of Running The Inspections In Inspection Results Tab


来自 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` 文件夹中。

Computer file explorer showing scan-results folder with multiple XML files and output.json file.


查看检查结果

正如稍后将看到的,我们可以在持续集成(CI)流程中报告这些结果。

我们也可以直接在 IntelliJ 中使用 `Analyse \ View Offline Inspection Results…`(分析 \ 查看离线检查结果)功能来查看这些结果。


Analyze View Offline Inspection Results


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


Loads Results Into The Inspection Results Tab


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

了解更多关于 Sensei 的信息


标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

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.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

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

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。