SonarQube质量门禁实践

这篇具有很好参考价值的文章主要介绍了SonarQube质量门禁实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

静态测试和动态测试

静态测试和动态测试是软件测试中两种不同的方法。

1. 静态测试

静态测试是一种对软件文档、代码和其他相关材料进行测试的方法,而不是在程序运行时测试。静态测试的目的是发现潜在的问题、错误和缺陷,以便在程序运行之前修复它们。静态测试通常由开发团队的成员完成,例如代码评审、需求审查、设计审查等。
静态测试的优点:

  • 可以在程序运行之前发现潜在问题,从而减少测试成本。
  • 可以提高团队成员的代码质量和协作效率。
  • 可以避免在生产环境中出现的严重错误和缺陷。

静态测试分类

  • 静态代码扫描
  • 代码评审
  • 单元测试

2. 动态测试

动态测试是在运行程序时对软件进行测试的方法,以确保它符合规格说明书中的要求,并且符合用户需求。动态测试可以进一步分为黑盒测试和白盒测试。

  • 黑盒测试:黑盒测试是基于软件外部行为的测试,它不需要了解软件的内部工作原理。测试人员只需根据软件规格说明书和用户需求来设计测试用例,以检查软件是否符合要求。
  • 白盒测试:白盒测试是基于软件内部结构和实现的测试,它需要了解软件的内部工作原理。测试人员需要查看软件代码和架构,以设计测试用例来检查软件是否正确地执行。
    动态测试的优点:
  • 可以验证软件是否符合规格说明书和用户需求。
  • 可以发现代码错误和缺陷。
  • 可以提高软件的稳定性和可靠性。

动态测试分类

  • 手工执行
  • 自动化
  • 性能
  • 安全

代码扫描工具的原理

分析对象主要分为两类:
-分析源文件
-分析编译后的文件 java字节码
大致分为以下几个步骤:

  1. 代码解析:首先,代码扫描工具需要将源代码转化为抽象语法树(AST)或其他形式的中间表示,以便进行后续的分析。
  2. 漏洞检测:扫描工具会对代码进行各种形式的静态分析,包括缺陷模式匹配、类型推断、数据流分析等,以检测潜在的漏洞和安全问题。
  3. 结果输出:扫描工具将分析结果输出为报告或者直接集成到集成开发环境(IDE)或代码仓库中,以便开发人员查看和修复。

SonarQube

SonarQube是一个用于代码质量管理的开源平台。它可以分析代码,检测代码中的技术债务和漏洞,并提供有关代码质量的可视化报告。 SonarQube支持各种编程语言,包括Java,C#,JavaScript,C / C ++等。
SonarQube提供了一系列插件,可以集成到各种构建工具中,如Maven,Gradle,Jenkins等。这使得SonarQube易于集成到现有的开发工作流程中,并且可以在代码提交时自动执行质量检查和代码分析。
除了代码质量管理外,SonarQube还可以帮助团队管理项目的技术债务。它可以通过检测代码中的潜在问题和漏洞来减少技术债务,并提供指导和建议,帮助开发人员编写更高质量的代码。
总之,SonarQube是一个强大的代码质量管理工具,可以帮助开发人员、项目经理和团队领导者在项目开发过程中提高代码质量和可维护性。

sonarqube框架组成

  • 被分析项目
  • SonarQube Scanner: SonarQube Scanner 是一个命令行工具,用于在项目中执行静态代码分析。它通过读取配置文件来决定要分析哪些文件和使用哪些规则。
  • SonarQube Server: SonarQube 服务器是核心组件,用于处理代码分析和存储分析结果。它提供了一个 Web 界面,让用户可以查看分析报告、设置分析规则、管理项目等。
  • 数据库,结果存储的地方

SonarQube环境搭建

整体思路是,sonar scanner分析项目代码,并将结果上传到sonar server
质量门禁,测试工具,单元测试

启动SonarQube Server

  1. 下载sonarqube https://www.sonarsource.com/products/sonarqube/downloads
  2. 根据自己的需求修改/conf/sonar.properties文件,可以指定连接的数据库、用户名、密码等
  3. 启动sonar服务,去bin目录根据不同的平台,启动服务
    质量门禁,测试工具,单元测试

启动SonarQube Scanner

服务启动同SonarQube Server,注意修改配置文件中的密钥和SonarQube Server进行连接

scanner对java工程进行代码扫描

要将SonarScanner与Java项目关联,您需要完成以下步骤:

  1. 下载并安装SonarScanner。
  2. 将SonarScanner添加到系统路径中。这样,可以在命令行中直接使用SonarScanner命令。
  3. 在的Java项目中添加一个SonarQube配置文件(sonar-project.properties)。该文件应包含项目的相关信息,例如项目名称、版本号、源代码目录、测试代码目录、构建工具等。
# 定义唯一的关键字
sonar.projectKey=devops-hello-service
# 定义项目名称
sonar.projectName=My project
# 定义项目的版本信息
sonar.projectVersion=1.0
# 指定扫描代码的目录位置(多个逗号分隔,java项目源代码一般在src目录下面)
sonar.sources=.
# 执行项目编码
sonar.sourceEncoding=UTF-8
# 指定扫描java语言,如果不指定,则扫描目录下存在的全部
sonar.language=java
# 扫描java项目时,指定编译文件所在目录,不指定该目录会报错
sonarjava.binaries=target/classes

配置文件可以来自于项目的properties文件,也可以是自己重写在analysis properties文件里
质量门禁,测试工具,单元测试
4. 运行SonarScanner命令来分析项目并将分析结果上传到SonarQube服务器上。您可以使用以下命令:

sonar-scanner

在运行该命令之前,请确保已经进入了包含项目代码的目录
5. 在SonarQube服务器上查看项目分析结果。您可以在SonarQube仪表板中查看项目的概览、代码质量、问题列表等信息。

scanner对maven工程进行代码扫描

  1. 安装并启动SonarQube Server
  2. 在Maven项目中添加SonarQube插件。您可以在Maven项目的pom.xml文件中添加以下内容:
<build>
  <plugins>
    <plugin>
      <groupId>org.sonarsource.scanner.maven</groupId>
      <artifactId>sonar-maven-plugin</artifactId>
      <version>3.8.0.2131</version>
    </plugin>
  </plugins>
</build>
  1. 在Maven项目中运行SonarQube扫描器。在Maven项目的根目录下,运行以下命令:
mvn sonar:sonar \
  -Dsonar.projectKey=<项目唯一标识符> \
  -Dsonar.host.url=<SonarQube服务器URL> \
  -Dsonar.login=<SonarQube用户令牌>

其中,sonar.projectKey是您的项目在SonarQube中的唯一标识符,sonar.host.url是您的SonarQube服务器的URL地址,sonar.login是您的SonarQube用户令牌,用于验证您的身份和访问权限,其中projectKey,host.ur,login也可以配置到maven的setting文件中。
4. 等待扫描完成并查看SonarQube分析报告。扫描完成后,您可以登录到SonarQube服务器,查看分析报告并获取有关代码质量、漏洞和缺陷的详细信息。
需要注意的是,SonarQube支持多种编程语言和技术栈,您需要根据项目类型和语言选择合适的SonarQube插件和配置。此外,为了获取更准确和详细的扫描结果,您可以在Maven项目的pom.xml文件中添加其他配置参数,例如:

- `sonar.projectName`:项目名称
- `sonar.projectVersion`:项目版本号
- `sonar.language`:代码语言
- `sonar.sources`:源代码目录
- `sonar.tests`:测试代码目录
- `sonar.java.binaries`:Java二进制文件目录
- `sonar.java.libraries`:Java依赖库目录
- `sonar.java.source`:Java源代码版本
- `sonar.java.target`:Java目标字节码版本

sonar的规则库设置

使用sonar默认的规则库扫描时可能会有一大堆严重缺陷,产出一大堆不适用本项目的bug,产出报告令开发很苦恼,并拒绝修复,可以根据项目调整sonar规则。在为公司项目设置Sonar规则时,应该考虑以下几个因素:

  1. 项目的技术栈:Sonar规则应该根据项目的技术栈来选择。例如,如果项目使用Java编程语言,则应该选择Java规则集。
  2. 项目的安全性要求:如果项目处理敏感数据或需要满足特定的安全标准,则应该选择与安全相关的规则集。
  3. 项目的复杂性:如果项目非常复杂,则可能需要更严格的规则集,以确保代码的质量和可靠性。
  4. 项目的团队规模:如果项目由大型团队开发,则需要考虑将规则设置为比较宽松,以避免代码审核过程中的冲突和耗时。
    一般来说,应该使用Sonar默认规则集,并根据项目需要进行调整。以下是一些可能有用的Sonar规则:
  5. 代码复杂性规则:这些规则可以帮助您避免过于复杂的代码,使代码更易于阅读和维护。
  6. 安全性规则:这些规则可以帮助您保持代码的安全性,并减少潜在的漏洞和安全风险。
  7. 代码可读性规则:这些规则可以帮助您确保代码易于理解和阅读,从而提高代码的可维护性。
  8. 性能规则:这些规则可以帮助您优化代码的性能,从而提高应用程序的响应速度和可扩展性。

sonar如何接入jenkins项目

jenkins接入sonar分为三种类型:文章来源地址https://www.toymoban.com/news/detail-727928.html

  • 普通类型(自由风格任务类型)
  • maven(java+maven)
  • pipeline

sonar如何接入jenkins Java项目

  1. 首先,在Jenkins中安装SonarQube插件。在Jenkins的管理面板中,导航到插件管理器,搜索并安装SonarQube插件。
    质量门禁,测试工具,单元测试
  2. 安装完成后,转到系统设置并配置SonarQube服务器。 在Jenkins管理面板中,导航到“系统设置”并找到SonarQube服务器配置部分。在此部分中,您需要提供SonarQube服务器的URL,身份验证令牌以及其他细节。
    质量门禁,测试工具,单元测试
  3. SonarScanner的安装可以在全局工具配置中选择自动安装
    质量门禁,测试工具,单元测试
  4. 然后,在构建过程中添加构建步骤以运行SonarQube分析。 在Jenkins作业配置的“构建”部分中,添加构建步骤以运行SonarQube分析。使用SonarScanner等其他工具来运行SonarQube分析。还需要提供SonarQube项目的唯一标识符。
    质量门禁,测试工具,单元测试
    质量门禁,测试工具,单元测试
    SonarQube analysis properties可以写在jenkins中,如上图。也可以放到项目的sonar-project.properties文件中,需要jenkins中指定配置文件的路径,格式如下:
sonar.projectKey=${JOB_NAME}
sonar.sources=.
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_VERSION}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
  1. 最后,可以在Jenkins中查看SonarQube报告。 在Jenkins作业的构建历史记录中,您可以找到SonarQube报告链接。您可以通过单击此链接来查看SonarQube分析的结果和报告。

sonar如何接入jenkins maven项目

  1. 安装和配置Jenkins Maven插件
    确保在Jenkins服务器上安装了Maven插件。在Jenkins中,转到Manage Jenkins > Manage Plugins > Available,搜索Maven Integration Plugin并安装。确保Maven的路径在全局工具配置中配置正确。
  2. 安装和配置SonarQube插件
    确保在Jenkins服务器上安装了SonarQube插件。在Jenkins中,转到Manage Jenkins > Manage Plugins > Available,搜索SonarQube Scanner插件并安装。
    质量门禁,测试工具,单元测试
  3. 配置SonarQube服务器
    在Jenkins中,转到Manage Jenkins > Configure System并找到SonarQube服务器的配置。添加SonarQube服务器,输入服务器URL,以及访问服务器的登录凭证。
  4. 在Maven项目中添加SonarQube插件
    在Maven项目的pom.xml文件中添加SonarQube插件。在标记中添加以下插件代码:
<plugin>
    <groupId>org.sonarsource.scanner.maven</groupId>
    <artifactId>sonar-maven-plugin</artifactId>
    <version>3.8.0.2131</version>
</plugin>
  1. 使用jenkins build项目,并使用sonar扫描
    在build中如下配置
    质量门禁,测试工具,单元测试
    其中maven具体需要使用那些命令根据自己的需求而定。
    然后根据需求设置pre step或者post step扫描
    质量门禁,测试工具,单元测试
    Analysis properties 配置内容如下:
sonar.projectKey=${JOB_NAME}
sonar.sources=.
sonar.projectName=${JOB_NAME}
sonar.projectVersion=${BUILD_VERSION}
sonar.language=java
sonar.sourceEncoding=UTF-8
sonar.sources=$WORKSPACE
sonar.java.binaries=$WORKSPACE
  1. 保存并构建
    保存Jenkins项目的配置并执行构建操作。Jenkins将在构建过程中运行SonarQube扫描,并将结果报告到SonarQube服务器。

sonar如何接入jenkins pipeline项目以及门禁设置

  1. 构建一个流水线job,流水线pipeline script如下编写:
    其中一些具体代码可以通过代码生成器生成
pipeline{
    agent {
        label "api_test"
    }
    options{
        // 保留最大的构建历史
        buildDiscarder(logRotator(numToKeepStr: '2')) 
        // 设置流水线运行时间最长不超过10Min,如果超过,则自动中止
        timeout(time:10,unit:'MINUTES')
        // 打印当前时间戳
        timestamps()
        // 增加重试3次
        retry(3)
    }
    tools{
        maven "maven"
    }
    stages{
        stage("代码获取"){
            steps{
                echo "开始拉取代码..."
                git credentialsId: '80cff850-de44-4be7-a874-d6d59a7712fd', url: 'https://gitee.com/jinjiancode/training_jrequests.git'
            }
        }
        stage("单元测试"){
            steps{
                echo "starting unittest..."
                bat "mvn test"
            }
        }
        stage("静态代码扫描"){
            steps{
                withSonarQubeEnv(credentialsId: 'sonar', installationName: 'sonarqube') {
                    // some block
                    bat "mvn sonar:sonar"
                }
            }
        }
        stage('代码质量门禁'){
            steps{
                script{
                    #等待质量门禁通过
                    def result=waitForQualityGate()
                    echo "结果状态为: ${result.status}"
                    if(result.status!='OK'){
                        echo "质量门禁不通过"
                        error '未达到Sonarqube质量门标要求!'
                    }

                }
            }
        }
        stage("部署到测试环境"){
            steps{
                echo "deploy to test env"
            }
        }
        stage('自动化测试'){
            parallel{
                stage('自动化测试'){
                    steps {
                        echo "执行自动化测试"
                    }
                }
                stage('性能测试'){
                    steps {
                        echo "执行性能测试"
                        build job: 'test_job1', parameters: [string(name: 'env', value: 'dev')]
                    }
                }
                stage('安全测试'){
                    steps {
                        echo "执行安全测试"
                        build job: 'test_job2', parameters: [string(name: 'env', value: 'dev')]
                    }
                }

            }
        }
        stage('生成报告'){
            steps{
                echo "生成报告"
            }
        }
        stage('部署到生产环境'){
            steps{
                input '是否部署到生产环境?'
                echo "执行部署。。。"
            }
        }
    }
    post{
        always{
            echo "发送邮件"
        }
        success {
            echo "发钉钉"
        }
        failure {
            echo "发微信"
        }
    }
}
  1. 接入Sonar质量门禁
    通过上面的job,只是代码扫描可能无法满足日常的情况,当扫描的结构不满足时我可能就不进行后面的步骤了,这样的情况,我们就需要接入质量门禁的方式来实现。
  2. 在sonar服务端的质量阀中设置质量门禁,添加要运用的项目,在质量配置->质量阀添加指标来定义通过扫描的条件。然后将设置的质量阀分配给要扫描的项目。
  3. 在sonar服务端的配置里面添加网络调用hook
    配置->网络调用
    质量门禁,测试工具,单元测试
    质量门禁,测试工具,单元测试
    这里添加Jenkins调用的地址,用来回调扫描的结果。URL配置为:Jenkins地址+/sonarqube-webhook

到了这里,关于SonarQube质量门禁实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 单元测试工具——JUnit的使用

    ⭐️ 前言 ⭐️ 本篇文章主要介绍单元测试工具JUnit的使用。 🍉 欢迎点赞 👍 收藏 ⭐ 留言评论 📝 私信必回哟 😁 🍉 博主将持续更新学习记录收获,友友们有任何问题可以在评论区留言 🍉 博客中涉及源码及博主日常练习代码均已上传GitHub JUnit提供了非常强大的注解功能

    2024年02月02日
    浏览(45)
  • 嵌入式单元测试工具Tessy的一些测试技巧

    最近做了一个平台项目,需要进行动态代码测试,入门了嵌入式单元测试工具Tessy,总结了一些简单的测试技巧。 当前网上的教程普遍只写内容概要,真正入手还得自己认真摸索一番。为此,特意总结了一些Tessy测试技巧以供有缘人参考。 提几个Tessy工具使用的问题。 1.如何

    2023年04月17日
    浏览(57)
  • Tessy — 嵌入式软件单元测试/ 集成测试工具学习

    Tessy — 嵌入式软件单元测试/ 集成测试工具 本文章向大家介绍Tessy — 嵌入式软件单元测试/ 集成测试工具,主要包括Tessy — 嵌入式软件单元测试/ 集成测试工具使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。 Tessy 源

    2024年02月04日
    浏览(65)
  • 单元测试之- mock工具mockito

     常用的mock工具mockito 在编写单元测试时,需要mock依赖的对象,减少依赖对象对测试的影响,Mocktio是常用的mock工具之一,那么mockito提供了哪些功能呢? Mock对象的创建和配置:Mockito可以通过简单的语法创建mock对象,并允许你配置mock对象的行为。 Mock对象的验证:Mockito提供

    2024年02月13日
    浏览(39)
  • 前端面试:【代码质量与工程实践】单元测试、集成测试和持续集成

    在现代软件开发中,确保代码质量是至关重要的。单元测试、集成测试和持续集成是关键的工程实践,用于提高代码的可靠性和可维护性。本文将深入探讨这些概念,以及它们如何在软件开发中发挥作用。 1. 单元测试(Unit Testing): 单元测试是一种测试方法,用于验证代码

    2024年02月11日
    浏览(43)
  • copilot 产生 python工具函数并生成单元测试

    stock.py 这个文件,我只写了注释(的开头),大部分注释内容和函数都是copilot 再新建一个 stock_test.py,写一行注释,Ctrl+L(或者调用 Open compiletion Panel)产生了很多的单元测试样例。 再装一个 Python Test Explorer 插件用来进行 GUI test 附上我的 python test gui 配置 .vscode/settings.jon 有了

    2024年02月04日
    浏览(42)
  • Java单元测试AI工具-Diffblue Cover

    什么是Diffblue? Diffblue是一款基于人工智能和机器学习技术的自动化测试工具。它可以帮助开发人员快速、准确地发现代码中的错误和漏洞,并生成相应的测试用例。Diffblue的核心技术是人工智能和机器学习,它可以自动地分析代码,理解代码逻辑,并生成相应的测试用例。

    2024年02月08日
    浏览(39)
  • 单元测试自动生成工具Evosuite的安装使用

    1.1介绍 官网: https://www.evosuite.org/ GitHub: https://github.com/EvoSuite 1.2安装插件 (1)直接安装 进入settigs中,点击plugins,搜索Evosuite,点击安装 (2)从官网下载安装 打开网页 https://plugins.jetbrains.com/plugin/18956-evosuite-xenoamess-tpm-/versions ,点击Download按钮下载插件。 选择菜单File

    2024年02月03日
    浏览(49)
  • 【Python百宝箱】Python测试工具大揭秘:从单元测试到Web自动化

    在现代软件开发中,测试是确保代码质量和稳定性的关键步骤。Python作为一门广泛应用的编程语言,拥有丰富的测试工具和库,从单元测试到Web自动化,覆盖了多个测试层面。本文将介绍一系列Python测试工具,帮助开发者选择适合项目需求的工具,提高代码的可靠性和可维护

    2024年02月03日
    浏览(48)
  • 代码质量检查工具SonarQube

    SonarQube是一个用于代码质量管理的开源平台,用于管理源代码的质量,通过SonarQube我们可以检测出项目中重复代码,潜在bug,代码规范,安全性漏洞等问题,并通过SonarQube web UI展示出来 Sonar集成过程: 开发人员在本地的IDE中使用sonarLint运行分析本地代码 开发人员将代码提交

    2024年02月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包