Skip to content

Jenkins - 代码分析

静态代码分析工具在不执行源代码的情况下对其进行检查,旨在识别潜在的 bug、代码风格违规、安全漏洞以及是否遵循最佳实践。将这些工具集成到您的 Jenkins 流水线中,可以及早获得关于代码质量的反馈。

现代方法:Warnings Next Generation 插件

Section titled “现代方法:Warnings Next Generation 插件”

虽然较旧的 Jenkins 设置为每个分析工具(Checkstyle Plugin、PMD Plugin、FindBugs Plugin 等)使用单独的插件,但现代且推荐的方法是使用 ‘Warnings Next Generation’ 插件(ID: warnings-ng)。

这个插件提供了一种统一的方式来解析来自大量静态分析工具的报告文件,并在 Jenkins 中一致地显示结果。

步骤 1:安装 ‘Warnings Next Generation’ 插件。

  • 前往 管理 Jenkins → 插件 → 可选插件。
  • 搜索 ‘Warnings Next Generation’。
  • 安装插件,如果提示,重启 Jenkins。

步骤 2:配置您的构建以生成报告。

  • 使用构建工具插件(Maven、Gradle 等)将静态分析工具集成到您的构建过程中,或将其作为独立命令运行。
  • 配置工具以生成支持格式(通常是 XML 或 JSON)的报告文件。
  • 常见的 Java 工具和插件:
    • Checkstyle: maven-checkstyle-plugin,Gradle checkstyle 插件。
    • PMD: maven-pmd-plugin,Gradle pmd 插件。
    • SpotBugs(FindBugs 的继任者): spotbugs-maven-plugin,Gradle spotbugs 插件。
  • 常见的 JavaScript 工具:
    • ESLint: 通过 npm 脚本运行,配置输出格式(例如,checkstyle XML)。
  • 其他工具: Warnings NG 插件支持跨多种语言的数十种工具。请查阅其文档以获取完整列表和预期的报告格式:https://plugins.jenkins.io/warnings-ng/

步骤 3:在 Jenkins 流水线中发布报告。

  • 使用 Warnings NG 插件提供的 recordIssues 步骤,通常在您的 Jenkinsfile 的 post 部分或构建/分析命令运行之后使用。
  • 配置 tools 参数,为每个工具指定解析器以及用于定位其报告文件的 pattern。

示例:使用 Maven 的声明式流水线 (Checkstyle, PMD, SpotBugs)

Section titled “示例:使用 Maven 的声明式流水线 (Checkstyle, PMD, SpotBugs)”

假设您的 pom.xml 已配置了相应的 Maven 插件,以便在 verify 阶段运行并在 target 目录中生成 XML 报告。

pipeline {
agent any
tools {
maven 'Maven 3.8'
jdk 'JDK 11'
}
stages {
stage('Checkout') {
steps {
git url: 'your-repo-url', branch: 'main'
}
}
stage('Build and Analyze') {
steps {
// 'verify' phase typically runs Checkstyle, PMD, SpotBugs if configured
sh 'mvn clean verify'
}
}
}
post {
always {
// Always record issues found
recordIssues(
// Aggregate results from multiple tools
aggregatingResults: true,
// Define the tools and their report locations
tools: [
checkStyle(pattern: '**/target/checkstyle-result.xml'),
pmdParser(id: 'pmd', name: 'PMD', pattern: '**/target/pmd.xml'), // Explicit ID/Name optional
spotbugs(pattern: '**/target/spotbugsXml.xml')
]
)
// Also publish test results, etc.
junit '**/target/surefire-reports/*.xml'
}
}
}

recordIssues 步骤运行后:

  • 构建页面侧边栏会出现一个 ‘Warnings’ 链接(如果未聚合,则为每个工具的链接)。
  • 点击链接将显示:
    • 随时间变化的警告数量趋势图。
    • 统计摘要(总警告数、新警告数、已修复警告数)。
    • 按严重程度、类别、模块、包等进行的细分。
    • 每个问题的详细视图,通常直接链接到 Jenkins 中的受影响源代码行(如果在步骤中启用了源代码扫描)。
  • 构建状态可能会受到警告数量或严重程度的影响(例如,如果出现新的高优先级警告,将构建设置为 UNSTABLE)。这可以在 recordIssues 步骤中进行配置(failOnError、unstableOnError、质量门禁)。

集成静态分析提供了关于代码质量的客观指标,并有助于在您的 CI/CD 流程中自动强制执行编码标准。